我正在處理C中的一個List實例,其中新節點被推到堆棧的末尾。當我嘗試將新節點推到最後時,我不斷收到Bus Error: 10
。這裏是我的推送功能:總線錯誤:在處理結構指針的C中爲10
void push(struct node *tail, struct node *newNode) {
tail->next = newNode; // gdb says the problem is here
tail = tail->next;
}
,我把它用push(tail, newNode);
而且,這裏是我的結構,如果必要的:
struct node
{
int hour;
int minute;
char *name;
struct node *next;
};
,這裏是展示代碼的主要功能,導致push()
int main()
{
char inputString[50];
int timeHour, timeMin;
struct node *head;
struct node *tail;
while ((scanf("%d:%d", &timeHour, &timeMin)) != EOF) {
scanf("%s", inputString);
if (strcmp(inputString, "enqueue") == 0) {
if (head == NULL) {
head = malloc(sizeof(struct node));
head->hour = timeHour;
head->minute = timeMin;
// get name
scanf("%s", inputString);
head->name = malloc(strlen(inputString)+1);
strcpy(head->name, inputString);
tail = head;
printEnqueue(head);
} else {
struct node *newEntry = malloc(sizeof(struct node));
newEntry->hour = timeHour;
newEntry->minute = timeMin;
// get name
scanf("%s", inputString);
newEntry->name = malloc(strlen(inputString)+1);
strcpy(newEntry->name, inputString);
push(tail, newEntry);
printEnqueue(newEntry);
}
} else {
pop(&head, timeHour, timeMin);
}
}
return 0;
}
爲什麼你傳遞一個指針的指針'newNode'到函數?你不修改指向'newNode'的指針,所以你只需要傳入指針。另外,當你在調試器中進入它時,* newNode指向什麼?它是一個有效的節點嗎? – user1118321
將'newNode'改爲常規指針後,我知道它在gdb中指向'newNode = 0x100103920'。我對存儲器一無所知,所以我不確定這是否是有效的節點或者不是哈哈。 – Slayter
最小的,**可編譯的**測試用例,請。沒有猜測,我們沒有所有必要的信息來回答這個問題。 – Sebivor