C++新手,用的VS2017,不知道为什么报这个错,望各位大牛帮帮忙!谢谢
C++新手,用的VS2017,不知道为什么报这个错,望各位大牛帮帮忙!谢谢以下是程序源码:
#include "pch.h"
#include <iostream>
int main()
{
int count = 0;
int *pNum = new int;
intnum;
std::cout << "请输入元素的个数" << std::endl;
while (!(std::cin >> count) || (count < 1))
{
std::cin.clear();//清除数据格式
std::cin.ignore(100, '\n');//清除缓存
std::cout << "请输入元素的个数" << std::endl;
}
std::cin.ignore(100, '\n');
//输入数组里元素的内容
for (int i = 0; i < count; ++i)
{
std::cout << "请输入第" << i + 1 << "的元素的值" << "\n";
while (!(std::cin >> num))
{
std::cin.clear();//清除数据格式
std::cin.ignore(100, '\n');//清除缓存
std::cout << "请输入第" << i + 1 << "的元素的值" << "\n";
}
std::cin.ignore(100, '\n');
pNum = num;
}
//打印数组内容
for (int i = 0; i < count; ++i)
{
std::cout << pNum << "\n";
}
return 0;
}
简单说一下,你申请数组空间的时候弄错了。int *pNum = new int;应该放在 “//输入数组里元素的内容”这个位置。不然你后面赋值的时候实际上越界了。 但是也偶尔有一两次不报错的情况! 灰色的天空 发表于 2019-8-10 23:56
简单说一下,你申请数组空间的时候弄错了。int *pNum = new int;应该放在 “//输入数组里元素的内容 ...
你好,我试了一下,确实不再报错了。能不能麻烦解释一下为什么在开头申请动态数组会越界,在后面申请就没有这个问题?麻烦了。非常感谢! 风羽.Song 发表于 2019-8-11 10:54
你好,我试了一下,确实不再报错了。能不能麻烦解释一下为什么在开头申请动态数组会越界,在后面申请就没 ...
哦我知道了,是不是刚开始count变量初始化为0,所以刚开始申请的数组的长度就为0?后面调用pNum、的时候就算越界?但是用new申请的空间是在堆里面申请的,在内存池里面申请的,在程序运行的过程中可以手动增加的,既然count是的变量的话,那count的大小是可以重新的赋值的,是否在改变count大小之后还需要做什么操作才能手动增加数组长度? 直接重新分配的话需要用C语言的malloc申请空间, realloc重新分配空间。而new的话你只有先申请另外长度的新空间然后memcpy把原来的空间的值赋值进入。最后delete [] p 释放原来的数组空间,p=null. 灰色的天空 发表于 2019-8-11 14:15
直接重新分配的话需要用C语言的malloc申请空间, realloc重新分配空间。而new的话你只有先申请另外长度的新 ...
谢谢!
页:
[1]