[英]How to debug this C code for a stack implementation?
我是C編程新手。 我為堆棧練習編寫了一些代碼。 問題是:結果之一是錯誤的,但是當我一步一步調試時,數字突然改變了。 你能幫我解決這個問題嗎?
// @name mystack.c
// Created by lilei on 2017/3/10.
//
#include "mystack.h"
#include <malloc.h>
#include <stdio.h>
Stack createStack(){
Stack stack = (Stack)malloc(sizeof(Stack));
stack->top = -1;
return stack;
}
int isFull(Stack s){
if (s->top == MAXSIZE-1){
return 1;
} else{
return 0;
}
}
int push(Stack s, ElementType item){
if(!isFull(s)){
s->top++;
s->data[s->top] = item;
return 1;
} else{
printf("full!");
return 0;
}
}
int isEmpty (Stack s){
if(s->top == -1){
return 1;
} else{
return 0;
}
}
ElementType pop(Stack s){
if(!isEmpty(s)){
ElementType e = s->data[s->top];
s->top--;
return e;
}
}
void myPrintf(Stack s){
int len = s->top;
printf("The data are ");
while(len >= 0){
printf("%d ", s->data[len]);
len--;
}
printf("\n");
}
int main(){
Stack s = createStack();
for(int i = 0; i < 7; i++){
push(s, i*2);
}
myPrintf(s);
printf("isEmpty:%d, isFull:%d\n, pop one:%d", isEmpty(s), isFull(s), pop(s));
}
結果是
我看不到Stack
的聲明,因為您忘記將它放在第一個問題中,但是必須將其聲明為指向struct
的指針,例如
typedef struct
{
int top;
ElementType data[MAXSIZE];
} *Stack;
// ^- means pointer
因此,堆棧是一種指針類型,這意味着,當您對其進行malloc分配時,根據您是針對32位還是64位進行編譯,您只能分配4或8個字節。 malloc行應為
Stack stack = malloc(sizeof *stack);
您沒有在堆棧上為實際的堆棧結構分配足夠的空間,這意味着您正在寫入您不擁有的堆的位,並且其他事情將寫入您認為已為堆棧分配的內存中。
還有另一個問題。 如果在堆棧為空時嘗試彈出某些內容, pop()
函數將返回什么? 答案是“可以是任何東西”。 您需要中止程序或返回一些錯誤值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.