この同じプログラムでは、大量のメモリ割り当てが行われるため、以前に問題が発生しました。ほとんどの問題は解決しましたが、まだ 1 つの特定の問題に悩まされています。プログラムを 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]);
}
助けてくれてありがとう!