gpt4 book ai didi

c - 为什么这段代码会发生内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:20 24 4
gpt4 key购买 nike

我是 C 的新手,我的程序有内存泄漏。

static int MT_reduce(MT_table** MT)
{
MT_table* newMT = new_MT((*MT)->argc);

/// fill data in the newMT ////

if(isReduced == 1 && newMT->size > 0)
{
MT_free(*MT);
*MT = newMT;
}

return isReduced;
}

在其他地方我调用这个程序:

    while(MT_reduce(&MT)==1);

在将 newMT 的地址分配给 MT 之前,我正在释放旧资源,但为什么会发生内存泄漏?如何在不泄漏内存的情况下将 MT 替换为 newMT

最佳答案

为了避免内存泄漏,您应该按以下方式编辑代码:

static int MT_reduce(MT_table** MT)
{
MT_table* newMT = new_MT((*MT)->argc);

/// fill data in the newMT ////

if(isReduced == 1 && newMT->size > 0)
{
MT_free(*MT);
*MT = newMT;
} else {
MT_free(newMT);
}

return isReduced;
}

即使不复制 newMT,也应始终释放它。

关于c - 为什么这段代码会发生内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072034/

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