저는 ansi C로 컴파일하면서 64 비트 Linux centos 5.7에서 gcc4.4.4와 gdb를 사용하고 있습니다. 왜 코드가 아래의 PDF == NULL에 해당하는지 테스트하고 exit (2)를 호출하는지 잘 모르겠습니다. 프로그램이 시작하기 전에 무료 -m을 사용하여C 프로그램 malloc 할당이 NULL을 반환하는 이유는 무엇입니까?
는void func(...)
...
double *PDF;
...
PDF = malloc(sizeof(double) * 1);
if (PDF == NULL) {
exit(2);
}
, 내가 관찰 :
total used free shared buffers cached
Mem: 2001 1955 46 0 71 975
-/+ buffers/cache: 907 1094
Swap: 4008 688 3319
을하고 프로그램은 종료에 앉아 때 (2); 코드의 라인은 무료 -m 읽 두 경우 모두
total used free shared buffers cached
Mem: 2001 1970 31 0 72 976
-/+ buffers/cache: 921 1080
Swap: 4008 688 3319
, 캐시 행에 사용 가능한 메모리의 많음, (한 바이트 확실히 충분히) 무료 열이있다.
PDF가 NULL이 될 수있는 다른 이유는 무엇입니까? 어떤 코딩 버그가 이것을 일으킬 수 있습니까?
문제가되는 경우 지난 주에 gdb를 많이 사용하여 "q"다음에 "y"를 사용하여 프로그램을 종료했습니다 (프로그램 종료로 인해 모든 malloc 메모리가 해제 될 것이라고 생각 함). 따라서 free() 코드를 실행할 필요가 없습니다.
문제를 재현하는 [SSCCE] (http://sscce.org) 샘플 (main(), includes 및 gcc 플래그)을 볼 수 있습니까? – pilcrow