仍然可以到达的块 - valgrind

时间:2016-02-03 23:34:49

标签: c memory-management memory-leaks valgrind

您好我的代码中释放数组有问题。

 int main(){
int **pole = mallocator(); ...

在主要的I调用函数中分配内存并查看:

int ** mallocator(){
int **pole = (int **) malloc(sizeof(int*)*RADEK);

for(int i=0; i < RADEK; i++){ 
    pole[i] = (int *) malloc(sizeof(int)*RADEK); 

 }

return pole;
}

最后我用这个函数释放它:

void freedom(int **pole){

for(int i=0; i < RADEK; i++){ 
    printf("%d\n", i);
    free(pole[i]);
}
free(pole);
}

RADEK是常数,值为25。 我认为它有用,但是valgrind说我有27个分配和26个释放,并说一个块仍然可以访问。关于如何实现无泄漏的任何想法?感谢

编辑:感谢注意,返回行不应该进入复制错误的周期。它也可能是编译器的错误。如果我使用gcc而不是g ++,它说没有泄漏,但是当我使用g ++进行编译时,它表示静态仍然可以访问:72,704,即使我在代码中不使用malloc也是如此。

1 个答案:

答案 0 :(得分:0)

修正mallocator()函数后,如评论中所指定的那样。

然后main()函数可以通过以下方式释放分配的内存:

for( int i=0; i<RADEK; i++ )
{
    free( pole[i]);
}
free( pole );