我在一个较大的程序中遇到了内存泄漏问题,我认为这是导致问题的原因。
#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