C - 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进行测试。什么好主意吗?

如何测量程序占用的内存量?我想到的一件事是,您正在查看操作系统正在跟踪的工作集的大小。由于您已经分配和释放了大量内存,因此该集合的大小增加了。有些操作系统会在一段时间后调整工作集的大小,有些则不会。我们现在看到的是什么操作系统?

当您调用malloc时,内存被分配到堆上。如果堆上剩余的空间不足,程序将向操作系统请求更多内存,并获取另一个块。从操作系统获得的内存通常在程序完成后才返回(尽管这取决于操作系统)。

程序大小通常不能单独用于检查内存泄漏!使用Valgrind或类似的工具来检查从未获得free d的内存

str* Character = (str*)malloc(sizeof(str) * 20000);

在上面的行中,您通过查找结构体的大小来分配内存。在这里,你将得到的结构体的大小将是指针宽度的大小,而不是char的大小。

假设例如,如果指针宽度为32位,它将分配(4 * 20000)= 80000字节。

如果你想分配20000个结构体,

str* Character = (str*)malloc(sizeof(char) * 20000);

相关内容

  • 没有找到相关文章

最新更新