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;
}
}
items
는 ItemT *
, 또는 라인 ItemT item = *((stackPtr->items));
에서 char **
나는 stackPtr->items
가 가리키는 char *
것을 얻고 변수 item
로 설정하고 item
를 반환하려합니다.
스택은 char *
이 가득하고 슬쩍 그냥 작동 : 테스터 프로그램이 팝업을 호출하고 무엇을 표시하는 것은 이것이다 popStack()
에 의해 반환 된 값을 표시 할 때
내 버그는 return
입니다 벌금. 그냥 여기에 팝이며 작동하지 않는 것 같습니다.
난 그냥 나쁜 데이터 또는 임의의 값을 빈 메모리 주소에 저장된 것으로 가정합니다. 따라서 나는 내가 뭘 잘못하고 있는지 전혀 모른다. 어떤 방법 으로든 누군가 나에게 여기서 잘못된 점을 설명 할 수 있습니까? 구조체에서 items
을 감소시키는 내 방법에 문제가 있습니까?
편집 1 :
popStack() 호출과 같은 : stackP
모든 정보를 포함하는 구조체에 대한 포인터입니다
printf("%s\n", popStack(stackP));
. 효과적으로 작동하기 때문에 top
및 count
을 무시할 수 있습니다. 방금 배웠던 --(stackPtr->items)
는 절대적으로 효과가 없습니다.
후 더 많은 코드를하시기 바랍니다 제거해야한다고 생각하고,이'* ((stackPtr을하지 않는다 -> items))''stackPtr-> items [0]'대신에 따라하기 쉽지 않습니다. –
나는 사실 그대로 생각했다. 지금 나는 논리를 올바르게하기 위해 노력하고 있습니다. 나는 포인터를 증가시키고있다. – FrankPalmasani
또한,'top'에 대한 것이 아니므로'item = stackPtr-> items [stackPtr-> top];'이어야하고 포인터를 변경하지 마십시오. 그렇지 않으면 어떻게 될까요? 그것을 무료로? –