我有以下 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/