메모리 할당량이 많아서이 동일한 프로그램으로 문제가 발생했습니다. 나는 대부분의 문제를 없애고 있지만 여전히 한 가지 특별한 문제에 문제가 있습니다. 이클립스 내 프로그램을 실행하면 그것을 잘 컴파일하지만 Valgrind의 그것을 실행했을 때 그것이 나에게 알려줍니다이 메시지메모리 문제로 인해 C 프로그램이 충돌하지만 디버깅 중에 충돌이 발생하지 않습니까?
*** glibc detected *** /home/user/workspace/TTPrueba/Debug/TTPrueba: free(): invalid pointer: 0xb6bc0588 ***
와 충돌이
==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]);
}
감사합니다! 가능성
아. 사랑스럽고 거의 * 아주 희귀 한 것은 아닙니다. [Heisenbug] (http://en.wikipedia.org/wiki/Heisenbug)는 자연 서식지입니다. 깃털의 아름다운 위장 무늬를 보시나요? 그게 뭐야? 너는 그것을 볼 수 없는가? 네, 그렇습니다. 그것이 그곳에 있음을 당신이 아는 방식입니다. – dmckee
디버거에서 메모리가 0 일 수도 있습니다. 프로그램에서이 경우가 아닐 수도 있습니다. malloc을 callocs로 변경하십시오. – Mikhail
"디버그 모드에서 단계별로 진행하고 프로그램이 절대로 충돌하지 않습니다 !!!!"- 디버깅의 세계에 오신 것을 환영합니다! –