我有一个简单的程序,声明一个整数数组,它的大小,根据大小为它分配内存,初始化元素,然后打印出数组中的每个初始化元素。但是,输出并不是我所期望的,我似乎无法找到任何文档来解释它。我将在下面发布代码和输出:
#include <iostream>
void main(int argc, char **argv)
{
int* a;
int size = 4;
a = new int[size];
for(int i = 0; i < size; i++)
{
a[i] = i + 1;
}
for(int i = 0; ; i++)
{
if(a[i])
{
std::cout << "a[" << i << "] = " << a[i] << std::endl;
}
else
{
break;
}
}
system("PAUSE");
}
答案 0 :(得分:0)
for(int i = 0; ; i++)
你的循环什么时候结束?!?!? for
中的第二个条件(测试表达式)被评估为true
(至少与i<4
一样长)。你需要
for(int i = 0; i < 4 ; i++)
否则它可能会在i>=4
之后的任何时间中断,但不会在之前,因为a
的所有组件i<4
(a[i] = i + 1;
)都不为零,并且{{1}之后你有未定义的行为,因为你没有为i==4
分配足够的内存。
此外,a
应根据main
标准返回int
。
PS:对于绝大多数简单的例子,大多数时候你甚至不需要调试器,只需在头脑中或在纸上模拟程序正在做什么,逐行,你会发现错误。