我有一個四邊形列表,他們有一個從1開始的標籤。該backpatch正在採取列表結構,指向一些四邊形。我想派遣更新這些四邊形,將字符*放在第四個,然後清空,所以我可以把其他四邊形later.I獲得seg.fault
在backpatch的strcpy
,雖然我已經爲char * z
和char * fourth
分配內存。有誰知道爲什麼會發生這種情況?strcpy分段錯誤
struct quad {
char *label; //5
char *first; //30
char *second;
char *third;
char *fourth;
struct quad *next;
};
struct list {
struct quad *quadlist;
struct list *nextlist;
};
void backpatch(struct list *l, char * z) {
struct list *temp = (struct list*) malloc(sizeof (struct list));
temp->nextlist = (struct list*) malloc(sizeof (struct list));
temp->quadlist = (struct quad*) malloc(sizeof (struct quad));
temp->quadlist->fourth = (char*)malloc(30 * sizeof (char));
l->nextlist = (struct list*) malloc(sizeof (struct list));
temp = l;
//z=(char*)malloc(sizeof(struct list))
while (temp->nextlist != NULL) {
strcpy(temp->quadlist->fourth, z);
temp = l->nextlist;
}
strcpy(temp->quadlist->fourth, z);
free(temp);
free(l);
}
即使我只保留
while (l->nextlist != NULL) {
strcpy(l->quadlist->fourth, z);
l = l->nextlist;
}
strcpy(l->quadlist->fourth, z);
free(l);
部分,其也seg.fault ...
你是否仔細檢查了'z'指向的字符串是否不大於你分配的30個字節。你也不應該把'malloc'返回,這是一個常見的錯誤來源。 –
['valgrind'](http://valgrind.org)可能會有所幫助。 – zwol
確保'l'已正確初始化。因爲你在賦值'temp = l;' –