首先,我認爲我在下面發佈的代碼有點含糊不清,因爲我必須以讀者可以理解的方式(原始代碼非常複雜)對其進行簡化。C - realloc導致結構問題
在下面的代碼:
- 有10項的列表。
- 每個項目都有一個關於它的信息列表。
- 每個信息都有一個名稱列表。
所以我試圖填充項目列表,但我沒有在重新分配我標記爲「<<<<
」的行上的內存。沒有編譯錯誤,但是當我打印所有項目的名稱時,它不打印任何這些項目。我做了一些調試,我很確定這一行「<<<<
」會導致錯誤,但我不知道爲什麼。
typedef struct {
char *name;
} NAME;
typedef struct {
int id;
int nNames;
NAME *names;
} INFO;
typedef struct {
INFO *info;
} ITEM;
void *buildListInfo(LIST *list) {
if (list != NULL) {
list->nNames++;
list->names = realloc(list->names, sizeof(INFO) * list->nNames++); // <<<<
list->names[list->nNames-1].name = "example"; // index 0 first
}
return list;
}
int main() {
int itemSize = 10;
ITEM *items = malloc(sizeof(ITEM)*itemSize);
for (int i = 0; i < ind->nTerms; i++) {
items[i].info = malloc(sizeof(INFO));
}
/* construct an array that holds the number of lists that an item has */
int num[itemSize];
for (int i = 0; i < itemSize; i++) {
num[i] = 0;
}
/* build all items, each item has a list that contains its info (many) */
while (<some_finite_condition>)
for (int i = 0; i < itemSize; i++) {
items[i].info[num[i]] = *buildList(&(items[i].info[list[i]]));
num[i]++;
}
}
}
這是一個錯字,我實際的代碼我有它的第一個參數,並因此包括stdlib.h中:)問題仍然存在。 – antiopengl
嗯,我試着仔細看看,看起來好像必須有*許多*錯別字。您顯示的功能不會在任何地方被調用;儘管如此,一個類似名稱的函數*被調用,所以也許就是這樣。對於所有的「拼寫錯誤」,我無法確定,但看起來很可能問題在於你將第一個參數傳遞給了'realloc()',它既不是最初從'malloc )'或'NULL'。如果你將垃圾傳遞給'realloc()',那麼可怕的事情就會發生! –