gpt4 book ai didi

c - 释放内存问题导致我的 C 程序崩溃,但在调试时它不会崩溃?

转载 作者:行者123 更新时间:2023-11-30 18:00:55 24 4
gpt4 key购买 nike

我以前在使用同一个程序时遇到过麻烦,因为它会分配大量内存。我解决了大部分问题,但仍然遇到一个特定问题。当我在 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)

所以问题是它试图释放无效的内存地址,但然后我在 Debug模式下一步一步地进行,程序永远不会崩溃!!!! :(

知道为什么会发生这样的事情吗?为什么调试时可以,但运行时不行?这是非常奇怪的行为。

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]);

}

感谢您的帮助!

最佳答案

一个可能的原因是调试器可能会更改事物的内存布局,因此当内存损坏时,它恰好位于“不碍事”的位置。

或者调试器可能会导致分配的内存归零,这在生产运行中可能不会发生。

关于c - 释放内存问题导致我的 C 程序崩溃,但在调试时它不会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com