0
typedef struct {
    long blarg;
} item;

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

List 和 Item 结构,相当简单。

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 !

哪里出了问题?

4

2 回答 2

1

你应该改变l.items[sizeof(item)+1]and l.items[(sizeof(item)*2)+1]--> l.items[1]andl.items[2]

于 2013-08-10T03:07:43.157 回答
0
realloc(l.items, l.size*sizeof(item));

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

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

于 2013-08-10T03:35:58.337 回答