C에서 링크 된 목록으로 작업하고 있지만 포인터를 사용하지 않는 것이 좋습니다.함수 후 포인터가 null입니다.
나는 연결된 목록 구조가 있습니다. 첫 번째 요소를 NULL로 초기화합니다. 이 포인터를 malloc을 사용하여리스트의 새로운 요소를 만드는 함수에 보낸다. 그러나 함수 호출 후에는 my 요소가 여전히 NULL입니다. 나는 이해하지 못한다. 그것은 확실히 바보 같은 오류가 발생하지만 약간의 도움이 필요합니다 ..
typedef struct Goto Goto;
struct Goto
{
int index;
Goto *next;
};
//my code
Goto* gotoList = NULL;
addLabel(gotoList, index);
// Here : gotoList is NULL
void addLabel(Goto* gotoList, int value) {
if (gotoList == NULL) {
Goto* gotoLabel = malloc(sizeof(*gotoList));
gotoLabel->index = value;
gotoLabel->next = NULL;
gotoList = gotoLabel;
}
else {
Goto* gotoLabel = gotoList;
Goto* newLabel = malloc(sizeof(*newLabel));
newLabel->next = NULL;
newLabel->index = value;
while (gotoLabel->next != NULL) {
gotoLabel = gotoLabel->next;
}
gotoLabel->next = newLabel;
}
// Here : gotoList is not NULL
} 변화를 만들기 위해 나에게
'Goto'유형을 호출하는 것이 가장 좋은 방법은 아닙니다. –
당신의 문제는'c '의 모든 것이 값으로 전달된다는 사실에 뿌리를두고 있습니다. 'gotoList'의 로컬 사본은 당신이 그 함수를 호출 할 때'addLabel'에서 만들어지고 그 범위는 그 함수에만 존재합니다. 'gotoList'에 대한 변경 사항을'addLabel' 밖에서 유지하려면'gotoList'를 반환하거나 포인터 ('Goto **'유형)를 전달하고 함수에서 해당 포인터를 참조 해제해야합니다. – yano