2015-01-09 4 views
1

다음의 C 코드를 컴파일하면 gcc가 'newNode'가 return newNode 라인에 선언되지 않았다고 오류를 표시하지만 그 이유는 알 수 없습니다. 누구든지이 오류를 설명하거나 문제를 해결할 수 있습니까?gcc가 왜 'newNode'변수에 선언되지 않았습니까?

node *insertNode(node *first, int cases) { 
int i; 
int m; 
int n; 

for(i=1;i<=cases-1;i++) { 
    scanf("%d %d",&m,&n); 
    node *newNode = (node *)malloc(sizeof(node)); 
    newNode->lower = m; 
    newNode->upper = n; 
    newNode->next = first; 
    newNode = first; 
} 

return newNode; } 

감사합니다,

+0

왜 당신은 haskell 컴파일러를 사용하고 있습니까? : p –

+0

malloc의 리턴을 캐스팅하지 마라. 'node * newNode = malloc (sizeof * newNode);' –

+0

하하, 어제 밤에 C와 하스켈을 사용했는데, gcc와 ghci 사이에 혼란 스러웠을 것이다. P – kw3rti

답변

3

newNode는 루프에 선언되어있다. 블록에서 선언 된 변수가 블록 외부의 범위를 벗어납니다. 대신 루프의 시작 전에 힙에 노드에 대한 포인터 배열을 선언하고 루프에서 초기화하고 배열을 반환 할 수 있습니다. 그렇게 할 경우 함수의 반환 유형을 node**으로 변경해야합니다.

+0

당신의 도움을 주셔서 감사합니다. 나는 그것을 시도 할 것이다. – kw3rti

0

변수는 for 블록 (중괄호로 묶인 부분) 내에 선언되어 있습니다. 따라서 해당 블록에 대해서만 유효/선언되고 외부에서는 볼 수 없습니다. 변수는 return의 시점에 없습니다.

당신은 그 공간에 하나의 node*들 저장 for 루프, node*의, 그것을 위해 malloc 메모리의 배열에 대한 node** newNodeList를 만들고, 결국 생성 된 newNodeList를 반환해야합니다

.

관련 문제