修复内存泄漏而不更改值

时间:2020-06-10 15:33:42

标签: c memory-leaks linked-list

所以,我做了一个堆栈库,它在一个链表中可以有多个堆栈。每个堆栈都可以将对象作为链接列表。我测试了该程序,它可以正常工作,但是内存泄漏似乎无法修复。我尝试使用教程和其他方法来完成此操作,但是当我尝试执行此操作时,它要么更改列表中的值,要么不起作用。有人可以告诉我吗?代码:

编辑: 这就是我使用的所有代码,我统一运行测试。我使用Valgrind来检测内存泄漏。我在这些测试中执行valgrind命令。我只是试图清除堆栈,但出现了双重释放或损坏错误

2 个答案:

答案 0 :(得分:0)

区域分配的大小对于某些结构没有合适的空间。
在mystack_create中进行更改:

  pStackMeta_t newStackList = malloc(sizeof(pStackMeta_t));
to
  pStackMeta_t newStackList = malloc(sizeof(StackMeta_t));

newStackList->stack = malloc(sizeof(pStackObject_t)); to newStackList->stack = malloc(sizeof(StackObject_t));


在mystack_push中倒数:

  pStackObject_t newStack = malloc(sizeof(pStackObject_t));
to
  pStackObject_t newStack = malloc(sizeof(StackObject_t));

答案 1 :(得分:0)

关于内存泄漏:

对于从调用malloc()calloc()返回的每个指针,必须使用相同的指针值调用free()

此代码:

while( tmpStackList != NULL && tmpStackList->handle != handle ) 
{
    tmpStackList = tmpStackList->next;
    if( tmpStackList == NULL ) 
    {
        return -1;
    }
}

无法将所有分配的内存块传递给free()

相关问题