2013-03-03 3 views
0

C 테스트를 위해 노력 중이며 링크 된 목록에 요소를 삽입하는 동안 런타임 문제가 발생합니다. 나의 유일한 목적은 목록에 4 가지 요소를 추가 한 다음 목록을 인쇄하는 것입니다. 그러나 오류가 발생합니다. 이미 삽입 코드를 보았고 코드가 옳은 것 같습니다. 오류를 볼 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. nihirus가 언급 한 바와 같이링크 된 목록에 요소 삽입

#include <stdio.h> 
#include <stdlib.h> 

struct ders{ 
    char kod; 
    struct ders *next; 

}*header; 
typedef struct ders Ders; 
void add(Ders*,Ders*); 
void print(Ders*); 

int main(void) 
{ 

header = NULL; 
Ders *node = NULL; 
int i = 0; 
char c; 
while(i<4) 
{ 
    scanf("%c",&c); 
    node = (Ders*)malloc(sizeof(Ders)); 
    node->kod = c; 
    node->next = NULL; 
    add(header,node); 
    i++; 


} 
print(header); 

return 0; 
} 

void add(Ders *header, Ders *node) 
{ 
    if(header == NULL){ 
     header = node; 
     header->next = NULL; } 
    else{ 
     node->next = header; 
     header = node; 

    } 
} 

void print(Ders *header) 
{ 
Ders *gecici = header; 

while(gecici != NULL){ 
    printf("%c\n",gecici->kod); 
    gecici = gecici->next; 
} 
} 
+0

귀하의'header' 변수가 항상'당신이 그것에 무엇을 할당하지 않기 때문에 NULL'. –

답변

1

, "포인터는 값으로 전달됩니다. 따라서 당신이 가리키는 메모리를 변경할 수 있지만, 즉 그것을 다른 것으로 지적하기 위해선, 실제 포인터를 변경할 수 없습니다."

귀하의 수정이 오류가 발생 *header is not member of struct 때문에 -> 는 시도 대신 (*header)->next = NULL 사용 *

보다 높은 우선 순위를 가지고있다.

C의 연산자 우선 순위 : http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm

+0

감사합니다. 나는 그럭저럭 요소를 추가 할 수 있었다. 나는 단지 명확히하기 위해 최종 질문을하고 싶다. void (int * a)를 수행하면 정수 배열이나 정수의 주소가 필요합니다. 즉, 참조로 호출하십시오. "void (Ders * a)"가 포인터의 복사본을 가져 오는 이유는 무엇입니까? 포인터를 callbyref로 만들려면 ** 사용해야합니까? 다음과 같은 것을하는 것이 현명합니까? void (char ** a)? – nihirus