C 释放一个由其他指针指向的实例

标签 c pointers free

我有以下 C 代码。我有两个指向同一个对象的指针。 它说双重免费错误。有人可以帮忙看看是什么问题吗?谢谢。

#include <stdlib.h>
#include <stdio.h>

typedef struct edge {
    int head;
} edge_t;

typedef struct edge_list_t {
    edge_t *edge;
} edge_list_t;
int main() {
    edge_list_t *p1;
    edge_list_t *p2;
    edge_t *c;

    p1 = malloc(sizeof(edge_list_t));
    p2 = malloc(sizeof(edge_list_t));

    c = malloc(sizeof(edge_t));

    p1->edge = c;
    p2->edge = c;

    free(c);

    if (p2->edge) {
        printf("not freed\n");
        free(p2->edge);
    } else {c
        printf("freed\n");
    }
    return 1;
}

最佳答案

p2->edge = c;

free(c);

if (p2->edge) {
    printf("not freed\n");
    free(p2->edge);

^ 最后一个free 是双重free。请记住,在第一个 free 调用之后,c 的值是一个无效值。

关于C 释放一个由其他指针指向的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354266/

相关文章:

C 如何使用指针创建返回数组的和与积的函数?赋值从指针生成整数

c - 使用交换函数交换二维数组指针中的地址

c - 如何释放分配的内存?

c - 2 种免费通话方式 - 有区别吗?

c - 对将用户数据传递到PortAudio回调感到困惑

C++ 指针到字符的问题

c - 使用 libxml2 计算 XML 中具有相同名称的标签

c - 是否有一些 "free-able"内存

c - 为什么在 C 中调用函数后变量的值会丢失?

c - 我做错了什么?尝试让用户输入不同变量的数值