我以前在使用同一个程序时遇到过麻烦,因为它会分配大量内存。我摆脱了大多数问题,但我仍然遇到一个特定问题。当我在 Eclipse 中运行我的程序时,它编译得很好,但它会因这条消息而崩溃
*** glibc detected *** /home/user/workspace/TTPrueba/Debug/TTPrueba: free(): invalid pointer: 0xb6bc0588 ***
当我用 Valgrind 运行它时,它告诉我这个
==31580== Process terminating with default action of signal 11 (SIGSEGV)
==31580== Access not within mapped region at address 0x0
==31580== at 0x804BEA3: termino (Menu.c:899)
==31580== by 0x804BE05: computar_transformadas (Menu.c:840)
所以问题是它试图释放一个无效的内存地址,但是我在调试模式下一步一步地去,程序永远不会崩溃!!!!:(
知道为什么会发生这样的事情吗?为什么它在调试时工作但在运行时不工作?这是非常奇怪的行为。
for(phi=0;phi<360;phi++){
for(j=0;j<par.param1[phi][0];j++){
for(o=0;o<(par.prueba[phi][j][1]-par.prueba[phi][j][0]);o++){//AQUI 849
free(par.pixels[phi][j][o]);//HERE IS LINE 899 WHERE IT ALWAYS CRASHES
if(o==(par.prueba[phi][j][1]-par.prueba[phi][j][0]-1))
free(par.pixels[phi][j]);
}
free(par.prueba[phi][j]);
}
谢谢您的帮助!