私は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 を追加しました)
- C/CPP 用の Eclipse Juno
==更新
エラーを追跡しました。長すぎるので正確なコードは掲載しませんが、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') を追加しても実行時エラーが発生しなかった理由については、まだ明確ではありません。これまでの回答から、これは「未定義の動作」に該当することを理解しています。