我前段时间写了一个程序(Mac OS X、C++、SDL、FMOD),它的性能相当不错。但最近我想扩展它的功能并添加更多代码。现在,当我运行它并尝试测试新功能时,程序会因 SIGABRT 而崩溃。
查看调试器,在函数堆栈上我看到:
- _杀
- 杀死$UNIX2003
- 增加
- __中止
- __stack_chk_fail
- odtworz <-- 我的函数被修改了
据我所知,“__stack_chk_fail”表示堆栈溢出。但这还不是最奇怪的。在这个函数“odworz”中,我有一些这样的代码:
...
koniec = 0;
while ( koniec == 0 ) {
...
if (mode == 1) {
...
}
else if (mode == 2) {
...
}
else if (mode == 3) {
piesniOrkiestrowe[0] = '\0';
while ( piesniOrkiestrowe[0] == '\0' ) {
losowaPiesn();
char * piesnOrkiestrowa = szukajPiesniOrkiestrowej();
if ( piesnOrkiestrowa != NULL )
strcpy(piesniOrkiestrowe, piesnOrkiestrowa);
}
char nowyPiesnPlik[25];
sprintf(nowyPiesnPlik, "%sorch/%s", PIESNI_DIR.c_str(), piesniOrkiestrowe);
}
}
mode 是一个全局变量,在之前的函数中设置为值“2”。现在想象一下——如果我删除了在这种模式下永远不会执行的第三个 if 语句(模式 == 3),程序不会崩溃!删除甚至无法执行的代码有助于解决这种情况!
现在,我不想删除此代码,因为它适用于我程序的其他模式。它在那里工作得很好。那么我可以在哪里搜索的任何提示?这可能有什么问题?