C의 List 예제에서 새 노드가 스택의 끝까지 푸시됩니다. 새 노드를 끝까지 밀어 넣으려고하면 Bus Error: 10
이 계속 나타납니다. 여기 내 푸시 기능입니다 :버스 오류 : C에서 구조체 포인터를 다루는 경우
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
최소, ** compilable ** 테스트 케이스, 제발. 추측하지 않고이 질문에 대답하는 데 필요한 모든 정보가 없습니다. – Sebivor