链接列表有问题。我有两种结构:
struct ekstra
{
char isim[256];
int deger;
struct ekstra *sonra;
};
struct node
{
char name[256];
int val;
struct ekstra *next;
};
我有这些:
struct ekstra *tmp;
struct node dizi[12];
我的代码中有某处
tmp = dizi[k].next;
tmp=tmp->sonra;
如果我这样做:
tmp = malloc(sizeof(struct ekstra));
没有问题。
但如果我这样做:
dizi[k].next->sonra = malloc(sizeof(struct ekstra));
我得到了一个SegFault。为什么会这样?
答案 0 :(得分:3)
这一行:
dizi[k].next->sonra = malloc(sizeof(struct ekstra));
正解除引用
dizi[k].next
我怀疑它有垃圾值。
答案 1 :(得分:0)
这两行:
tmp = dizi[k].next;
tmp = tmp->sonra;
可能会将无效指针复制到tmp
。当您使用tmp
分配给malloc()
时,来自malloc()
的有效指针会覆盖tmp
中已有的无效值。
使用时:
dizi[k].next->sonra = malloc(sizeof(struct ekstra));
您正在引用无效指针(以评估存储sonra
成员的地址),这会导致分段错误。
如果你写了:
*tmp = 0;
你也可能会遇到分段错误。