gpt4 book ai didi

c - C 中的内存泄漏

转载 作者:行者123 更新时间:2023-12-04 10:48:20 25 4
gpt4 key购买 nike

我是 C 初学者,我正在编写一个非常简单的链表。我想知道以下代码是否会发生内存泄漏:

void removeListEntry(struct tableEntry *symp, struct tableEntry *previous) {
if (symp->next = 0){
symbolList.tail = previous;
previous->next =0;
} else {
previous->next = symp->next;
symp->next = 0;
}
}

我很确定如果指针 symp 没有存储在另一个变量中,则无法访问指针指向的列表条目,因此我会发生内存泄漏。在 C 中,我们使用 malloc() 函数为数据结构分配内存空间,我记得在 C++ 中使用 new 关键字“动态”分配内存。使用 malloc() 和使用 new 分配内存有什么区别?我的代码中是否确实存在内存泄漏?

最佳答案

if (symp->next = 0) {

这个 if-“条件”是一个赋值,将 symp->next 设置为 0。如果指向另一个对象的指针存储在 symp->next 中,则该对象将丢失并且对象内存将不会被释放。

为了进行比较,您需要使用 == 代替:

if (symp->next == 0) {

或者在没有明确比较的情况下进行:

if (!symp->next) {

else 的情况下,您从列表中删除 symp(假设 previous 实际上包含 symp 之前的元素), 但你不释放它的内存。这可能是内存泄漏,但这取决于调用该函数的代码:该代码可能仍会释放 symp 或对已删除的元素执行其他操作,或者它可能只是忘记它并泄漏它的内存.

关于c - C 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1806483/

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