C动态列表故障

时间:2013-08-10 02:56:00

标签: c list dynamic

typedef struct {
    long blarg;
} item;

typedef struct 
{
    item* items;
    int size;
} list;

列表和项目结构,相当简单。

list l;
l.size = 3;
realloc(l.items, l.size*sizeof(item));

创建一个列表,将其分配给3个项目。

item thing;
item thing2;
item thing3;

thing.blarg = 1337;
thing2.blarg = 33;
thing3.blarg = 123;

l.items[0] = thing;
l.items[sizeof(item)+1] = thing2;
l.items[(sizeof(item)*2)+1] = thing3;

创建一些项目并将它们添加到列表中......但是在打印它们时:

printf("List 0: %ld\n", l.items[0].blarg);
printf("List 1: %ld\n", l.items[sizeof(item)+1].blarg);
printf("List 2: %ld\n", l.items[(sizeof(item)*2)+1].blarg);

List 0: 1337 
List 1: 33 {
List 2: 1953720652 !

哪里出错了?

2 个答案:

答案 0 :(得分:1)

您应该更改l.items[sizeof(item)+1]l.items[(sizeof(item)*2)+1] - > l.items[1]l.items[2]

答案 1 :(得分:0)

realloc(l.items, l.size*sizeof(item));

刚刚分配了l.size(即3个)项元素, 而sizeof(item)+1和sizeof(item)* 2 + 1已超出l.items数组的范围, 所以会读取未知值,事实上,应该发生段错误

如果你想以你的方式使用l.items, 你应该首先将l.items转换为(void *), 然后将它转换回item *,同时获得blarg的值