큰 프로그램에서 메모리 누수가 발생했으며 이것이 원인이라고 생각합니다.char 포인터가 배열 메모리 누수입니다.
#include <stdlib.h>
#include <Windows.h>
typedef struct _struct{
char* name;
} str;
int main() {
system("PAUSE");
str* Character = (str*)malloc(sizeof(str) * 20000);
for(int i = 0; i < 20000; i++){
Character[i].name = (char*)malloc(20000); // Assign memory.
}
for(int i = 0; i < 20000; i++){
free(Character[i].name); // Free memory.
}
free(Character);
system("PAUSE");
}
첫 번째 일시 중지시 메모리 : ~ 500K.
두 번째 일시 중지시 메모리 : ~ 1.7M.
테스트를 위해 VS2012 사용. 어떤 아이디어?
코드가 올바르게 보입니다. 어떻게 메모리 사용을 측정하고 있습니까? 힙 관리자가'free'에 대한 호출에 따라 단순히 힙을 압축하지 않았을 가능성이 있습니까? 이 경우 여분의 메모리는 프로세스에 할당되지만 프로그램에서 사용하지 않으므로 실제로 다른 코드가 할당 할 수 있습니다. – simonc
malloc을 사용할 때 pls는 메모리가 실제로 할당되었는지 확인해야합니다 (문자 == NULL) – hazzelnuttie
malloc에서 반환 값을 캐스팅하지 않아야합니다. 이것은 C이며 void *를 지정할 수 있습니다. –