2013-12-12 3 views
0

나는 포럼 전체에서 검색 한 결과 많은 사람들이 같은 문제를 겪고 있음을 알았지 만 해결할 수는 없습니다. 내가 점점 계속은 : 추적 코드에 오류 "조건부 점프 또는 이동은 초기화되지 않은 값 (들)에 따라 달라집니다"valgrind 조건부 점프 또는 이동 오류

void printStack(stack S) 
{ 
    node current; 
    current = (node)S->last; 
    while(current != NULL) 
    { 
     S->labelFunc(current->value); 
     current = current->prev; 
    } 
    //free(current); 
} 

printStack 함수가 스택을 받고 (스택의 요소를 인쇄하는 스택 때문에 char * s 인 ADT입니다. 몇 가지 이상한 이유로 내가 while 회선에서 오류를 계속, 현재 노드에 대한 장소를 mallocing했는데, 나는 그것의 prev 및 다음 포인터를 initialised 시도, 내가 스택을 가지고 있는지 확인했지만 null의 모든 그건 헛된 ...

labelFunc는 각 문자 *를 인쇄하는 인쇄 기능입니다.

감사

+1

'S-> last'를'node'로 캐스팅 할 필요가 없습니다. 어쨌든,'node'는'typedef'ed 포인터 타입으로 보입니다. 보통 C의 문맥에서 이것은 눈살을 찌푸리게됩니다. –

답변

1

가장 가능성있는 원인은 S->last합니다 (node->prev 포인터 또는 1가) 초기화되지 않은 것입니다.

+0

대단히 고맙습니다. 오류가 발견되었습니다. 실제로 도로의 일부를 초기화하지 않았습니다 : P – UserED

+0

코드의 일부만 표시했기 때문에 모르겠지만'calloc' 대신'malloc '만약 당신이 배열을 가진 구조체에 대해서도 배열의 메모리를 할당해야한다면 (정적으로 할당 할 수 없기 때문에). 일반적으로 이것은 'malloc'에 의해 초기화되지 않은 메모리에 의한 조건부 점프를 방지합니다. – Kyrol

관련 문제