C中的链表分段错误

时间:2012-06-07 23:23:09

标签: c pointers linked-list segmentation-fault

链接列表有问题。我有两种结构:

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。为什么会这样?

2 个答案:

答案 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;

你也可能会遇到分段错误。