#include<iostream>
using namespace std;
int main()
{
long* pt = new long;
long sum = 0;
cout << “请输入数字:”;
cin >> pt[0];
for (int i = 0; pt[i] != 0;)
{
sum += pt[i];
cout << “输入累计和为:” << sum << endl;
cout << “请输入数字:”;
i++;
cin >> pt[i];
}
cout << “输入0,程序退出”;
delete pt;
cin.get();
cin.get();
return 0;
}
应该是内存释放方法不当。删掉delete pt;正常返回0
using namespace std;
int main()
{
long* pt = new long;
long sum = 0;
cout << “请输入数字:”;
cin >> pt[0];
for (int i = 0; pt[i] != 0;)
{
sum += pt[i];
cout << “输入累计和为:” << sum << endl;
cout << “请输入数字:”;
i++;
cin >> pt[i];
}
cout << “输入0,程序退出”;
delete pt;
cin.get();
cin.get();
return 0;
}
应该是内存释放方法不当。删掉delete pt;正常返回0
解决方案:10分
i++; 之后pt[i]越界了
解决方案:10分
判断能否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。假如该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h> #include <stdlib.h> #include <windows.h> int main() { int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11] srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。 while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。 b[(a=rand()%11)]=0; Sleep(100); b[(a=rand()%11)]=1; Sleep(100); b[(a=rand()%11)]=2; Sleep(100); b[(a=rand()%11)]=3; Sleep(100); b[(a=rand()%11)]=4; Sleep(100); } return 0; }