我在 C 中有以下代码:
while(tempNode!=NULL) {
int pos = pathNodesCount-1-i;
pathNodes[pos] = tempNode;
//printf("A");
euclidianLength += tempNode->g;
i = i+1;
tempNode = tempNode->parent;
}
如果我将该printf("A")
语句注释掉,然后编译并运行我的代码,我将收到“应用程序停止运行”Windows 错误。如果我取消注释该printf("A")
行,重新编译并运行,应用程序将运行到它的末尾(沿途将“A”打印到控制台)。为什么?
环境是:
- 视窗 7 32 位
- MinGW32 20120426(我添加了 MSys 1.0)
- Eclipse Juno 用于 C/CPP
== 更新
我已经跟踪了我的错误。我不会发布确切的代码,因为它太长了,但它是创建一个 char 数组,然后在错误的索引处添加字符的情况。像这样的东西:
int otherCrap() {
char* c = malloc(10*sizeof(char));
int i = 0;
for(i = 0; i<13; i++) {
c[i]='a';
}
c[15] = '\0';
printf("A");
printf(c);
return 0;
}
修复问题,使字符仅在现有索引处放置在数组中,并将 '\0' 字符添加为数组中的最后一个元素解决了该问题。但是,我仍然不清楚为什么当代码错误时,在打印 char 数组之前添加 printf('A') 不会导致运行时错误。从到目前为止收到的答案中,我了解到这属于“未定义的行为”。