2015-01-23 4 views
0

C에서 일련의 스택 조작 함수를 작성하고 있는데 pop과 관련된 문제가 있습니다. 테스터 파일은 ItemT을 반환해야합니다. ItemT은 의 경우 define 일뿐입니다. (stackPtr->items)문자 배열 오류 반환, 이상한 반환 값

ItemT popStack(StackP stackPtr) { 
    if (isEmptyStack(stackPtr)) { 
    fprintf(stderr, "\nERROR: Empty stack...\n"); 
    return NOTHING; 
    } 
    else { 
    ItemT item = *((stackPtr->items)); 
    (stackPtr->top)--; 
    (stackPtr->count)--; 
    --(stackPtr->items); 
    return item; 
    } 
} 

itemsItemT *, 또는 라인 ItemT item = *((stackPtr->items));에서 char **

나는 stackPtr->items가 가리키는 char * 것을 얻고 변수 item로 설정하고 item를 반환하려합니다.

enter image description here

스택은 char *이 가득하고 슬쩍 그냥 작동 : 테스터 프로그램이 팝업을 호출하고 무엇을 표시하는 것은 이것이다 popStack()에 의해 반환 된 값을 표시 할 때

내 버그는 return입니다 벌금. 그냥 여기에 팝이며 작동하지 않는 것 같습니다.

난 그냥 나쁜 데이터 또는 임의의 값을 빈 메모리 주소에 저장된 것으로 가정합니다. 따라서 나는 내가 뭘 잘못하고 있는지 전혀 모른다. 어떤 방법 으로든 누군가 나에게 여기서 잘못된 점을 설명 할 수 있습니까? 구조체에서 items을 감소시키는 내 방법에 문제가 있습니까?

편집 1 :

popStack() 호출과 같은 : stackP 모든 정보를 포함하는 구조체에 대한 포인터입니다

printf("%s\n", popStack(stackP));. 효과적으로 작동하기 때문에 topcount을 무시할 수 있습니다. 방금 배웠던 --(stackPtr->items)는 절대적으로 효과가 없습니다.

+0

후 더 많은 코드를하시기 바랍니다 제거해야한다고 생각하고,이'* ((stackPtr을하지 않는다 -> items))''stackPtr-> items [0]'대신에 따라하기 쉽지 않습니다. –

+0

나는 사실 그대로 생각했다. 지금 나는 논리를 올바르게하기 위해 노력하고 있습니다. 나는 포인터를 증가시키고있다. – FrankPalmasani

+0

또한,'top'에 대한 것이 아니므로'item = stackPtr-> items [stackPtr-> top];'이어야하고 포인터를 변경하지 마십시오. 그렇지 않으면 어떻게 될까요? 그것을 무료로? –

답변

1

난 당신이

ItemT item = *((stackPtr->items)); 

ItemT item = stackPtr->items[stackPtr->top]; 

을 변경하고이

--(stackPtr->items); 
+0

그랬지만, 지금은 나쁜 논리로 인해 세분화 오류에서 일하고 있습니다. 제 프로그램의 많은 부분에 제안 된 변경 사항을 추가하기 때문에 미세 조정이 필요하지만, 5 시간 후에는 올바른 방향으로 나아갈 것입니다. @iharob 감사합니다. – FrankPalmasani