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]l.items[(sizeof(item)*2)+1]-->l.items[1]とを変更する必要がありますl.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 に答える