2

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

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

4

2 回答 2

3

This line:

dizi[k].next->sonra = malloc(sizeof(struct ekstra));

is dereferencing

dizi[k].next

and I suspect that has a junk value.

于 2012-06-08T00:04:16.343 回答
0

这两行:

tmp = dizi[k].next;
tmp = tmp->sonra;

可能将无效指针复制到tmp. 当您分配给tmpwith 时malloc(),来自的有效指针malloc()会覆盖已在 中的无效值tmp

当您使用:

dizi[k].next->sonra = malloc(sizeof(struct ekstra));

您正在引用无效指针(以评估sonra存储成员的地址),这导致了分段错误。

如果你写:

*tmp = 0;

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

于 2012-06-08T00:11:09.253 回答