cs50 pset5处于卸载功能、释放内存时内存泄漏
我目前正在工作 当我试图释放程序中的所有内存时,遇到内存泄漏。 这个错误似乎发生在我的unload函数中,在这里它为指针游标指定malloc。 如果有人能就如何处理这个问题向我提供指导,请让我知道。 我还为我的代码提供了注释,以强调它正在做什么 那么为什么会发生内存泄漏呢? 然而,在我的代码中,我在使用游标和tmp指针之后释放了它们。cs50 pset5处于卸载功能、释放内存时内存泄漏,c,memory-leaks,hashtable,cs50,C,Memory Leaks,Hashtable,Cs50,我目前正在工作 当我试图释放程序中的所有内存时,遇到内存泄漏。 这个错误似乎发生在我的unload函数中,在这里它为指针游标指定malloc。 如果有人能就如何处理这个问题向我提供指导,请让我知道。 我还为我的代码提供了注释,以强调它正在做什么 那么为什么会发生内存泄漏呢? 然而,在我的代码中,我在使用游标和tmp指针之后释放了它们。 我不知道为什么会遇到错误,尽管我在函数末尾释放了它。是的,内存泄漏发生在这里!!!!正如你所说 您分配了两个缓冲区,但后来它们的指针被表[i]覆盖而没有被释放。
我不知道为什么会遇到错误,尽管我在函数末尾释放了它。是的,内存泄漏发生在这里!!!!正如你所说 您分配了两个缓冲区,但后来它们的指针被表[i]覆盖而没有被释放。这是内存泄漏 为了避免内存泄漏,请停止分配未使用的缓冲区 角色
// allocate memory for struct type `node` pointer
node *cursor = (node*)malloc(sizeof(node)); // MEMORY LEAK happens here !!!! :(
node *tmp = (node*)malloc(sizeof(node));
// if memory cannot be allocated successfully, return false
if (cursor == NULL || tmp == NULL)
{
return false;
}
应该是公正的
// allocate memory for struct type `node` pointer
node *cursor;
node *tmp;
指针的内存在堆栈上分配
也是这个部分
// free memory for cursor
free(cursor);
应删除,因为列表已被释放,从函数返回时,游标的内存将自动从堆栈中释放。谢谢您的回答!你的回答确实很有趣,我想问你另一个关于你在这里写的问题。所以,您说被表[i]覆盖而不被释放,我相信您指的是tmp=table[i];上的代码;。为什么我不能覆盖指针?实际上,我想做的是,让tmp指向[I]所指向的任何表。这意味着,我只是将内存地址表[I]所保存的内容传递给tmp。为什么不允许这样做?表[i]和tmp都是相同的数据类型,它是指向节点的指针。节点是一种结构类型,只需将表[i]持有的内存地址传递给tmp是允许的。坏的是分配未使用的缓冲区,并通过分配新地址而不释放缓冲区来丢弃存储在tmp中的地址。
// allocate memory for struct type `node` pointer
node *cursor;
node *tmp;
// free memory for cursor
free(cursor);