【问题标题】:Still reachable blocks - valgrind仍然可以到达的块 - valgrind
【发布时间】:2016-05-13 09:43:12
【问题描述】:

您好,我在代码中释放数组时遇到问题。

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

在 main 中,我调用分配内存的函数,如下所示:

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。

【问题讨论】:

标签: c memory-management memory-leaks valgrind


【解决方案1】:

更正 mallocator() 函数后,如 cmets 中指定的那样。

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

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

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2022-01-05
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2023-03-29
    相关资源
    最近更新 更多