簡體   English   中英

具有指針的基於數組的堆棧的C程序

[英]C program with an array based stack using pointers

這是我的代碼,無法正常工作。 有任何想法嗎? 我不能根據給定的分配更改主要功能或任何功能名稱或參數,我只能更改功能的內容。 我太困了。 任何幫助表示贊賞。 我已經在push函數上運行了GDB,它似乎運行得很好。 但是,打印堆棧函數認為數組的長度為0,這完全沒有幫助。 非常感謝!

typedef int *stack;

void push (stack st, int num)
{
        int len = st[0];
        st[len+1]=num;
        st[0]++;

}
int pop(stack st)
{
        int len = st[0], x;
        x = st[len];
        st[0]--;
        return x;
}
void printstack(stack st)
{
        int i, len= st[0];
        for(i=1;i<=len;i++)
        {
                printf("%d ", st[i]);
        }

}
stack makestack()
{
        stack n;
        int arr[20];
        n = malloc(sizeof(stack));
        arr[0]=0;
        n= arr;
        return n;
}
int main()
{
 stack s;
 stack t;
 s = makestack();
 t = makestack();

 int x;
 push(s, 4);
 push(s, 6);
 push(t, 7);
 push(t, 5);
 printstack(s);
 printstack(t);
 x = pop(s);
 printf("%d popped from s\n", x);
 printstack(s);
 printstack(t);
}

您有未定義的行為,因為

stack n;
int arr[20];
n = malloc(sizeof(stack));
arr[0]=0;
n= arr;
return n;

arrmakestack局部變量,一旦控件退出makestack ,它將被銷毀。 因此,您將指的是無效的內存。

因此將makestack更改為如下。

    stack makestack()
    {
            stack n = malloc(sizeof(int)*20);
            n[0]=0;
            return n;
    }

注意:正確鍵入指針是錯誤的,避免使用它。

  typedef int *stack; //bad

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM