gpt4 book ai didi

c - 指针数组中丢失的 valgrind 内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:32 25 4
gpt4 key购买 nike

我正在使用 Valgrind 调试我的 C 程序。我收到的错误是:

==2765== 8,000 bytes in 2 blocks are definitely lost in loss record 1 of 1
==2765== at 0x4C274A8: malloc (vg_replace_malloc.c:236)
==2765== by 0x404123: main (mycode.cpp:352)

这是第 352 行附近的代码:

int **matrix;
matrix = (int**)malloc(2*sizeof(int*));
for (i=0; i<2; i++){
matrix[i] = (int*)malloc(size*sizeof(int)); //line 352
}
for (i=0; i<2; i++){ //inizialization
for (k=0; k<size; k++)
matrix[i][k] = 0;
}

这是我为矩阵分配内存的方式。这有什么问题吗?


更新:在程序结束时,我使用了:

free(matrix);

最佳答案

valgrind 输出表明您正在释放 matrix 而不是它的成员。每次分配都必须调用一次 free:

for (i=0; i<2; i++) {
free(matrix[i]);
}
free(matrix);

请注意,如果您使用 calloc 分配内存,您可以简化代码,避免初始化为零循环:

int **matrix = malloc(2*sizeof(int*));
for (i=0; i<2; i++){
matrix[i] = calloc(size*sizeof(int));
}

关于c - 指针数组中丢失的 valgrind 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com