C語言關於棧的記憶體釋放問題

2025-07-19 17:10:13 字數 1846 閱讀 6724

1樓:在晴天的雨傘

是initstack(s)吧?程式裡就沒有initsqlist()。

因為棧內容沒有初始化,所以訪問那個s->top時就出錯了,並不是分配記憶體的malloc的問題。

把主函式里這兩行改一下:

stack *s; /* 這裡沒有給s分配記憶體,這只是乙個stack的指標*/

initstack(s);

改為:stack s; /* 這樣就給s分配空間了, 現在就可以用了*/

initstack(&s);

這個問題就好了。

相應地,以後使用棧時注意使用指標就好:

showstack(s);

改為showstack(&s);

還有一種做法,就是在:

stack *s;

initstack(s);

中間給指標s分配記憶體,讓指標s指向正確的結構:

stack *s;

s = (stack*)malloc(sizeof(stack));

initstack(s);

c語言關於棧中記憶體無法使用的問題

2樓:網友

stack *s;這裡的是乙個指標,沒有分配記憶體空間。

c語言資料結構中,關於棧的初始化的問題!

3樓:gta小雞

不過是把int *s; s=(int*)malloc(sizeof(int));這兩條語句合併成了一條而已。

c語言中動態記憶體和自動記憶體都是存放在棧中嗎?棧中的記憶體為什麼不會隨函式呼叫被釋放

4樓:村驢

動態記憶體是存放在棧中的,自動記憶體是存放在堆中的。堆中的記憶體不會隨呼叫而釋放,所以才有了連結串列。至於為什麼不會釋放,這是自身設定的。

關於c語言堆疊的問題!

5樓:匿名使用者

c語言中堆疊說的是資料結構,和系統中的堆疊中是不一樣的,/*

用乙個靜態陣列實現的堆疊。陣列的長度只能通過修改#define的定義。

並對模組重新進行編譯。

#include""

#include#define stack_size 100 /*堆疊中值數量的最大限制*//*

儲存堆疊中值的陣列和乙個指向堆疊頂部元素的指標。

static stack_type stack[stack_size];

static int top_element =-1;/*push*/

void push(stack_type value)

pop*/stack_type pop(void)

top*/stack_type top (void)

**is _empty

int is_empty(void)

**is_full

int is_full(void)

這是個靜態堆疊,你可以動態的申請記憶體來編寫動態堆疊。

**c語言程式為什麼需要記憶體 棧又是什麼

6樓:

其實任何程式都是需要記憶體的,就像電腦為啥要有記憶體條一樣。

所有程式都是要通過cpu進行運算,乙個cpu到時有暫存器,但cpu是用於計算的,暫存器不可能很大。那麼程式只能放記憶體了。

只是c語言的記憶體可以通過開發人員諮詢分配釋放,因此能夠更靈活分配記憶體。當然因為是人為分配記憶體,也會更容易出現記憶體破壞問題。

棧可以理解為程式放到記憶體的乙個區域,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

關於c語言的問題,關於C語言的問題。

題1 include int main 題2 include int main 題3 include int main 第1個題目 就是判斷while 括號裡面的值是否為真,因為加了個!所以 k 0 n 為真時while裡面的判斷語句就為假,因為 為邏輯與,就是判斷 兩邊的式子是否為真,當k 0為真...

C語言小問題,關於,關於C語言的小問題?

a b max a max b 語法錯誤,該為 a b max a max b 另外注意 printf 最大值為 c n c 改正為printf 最大值為 d n c 已測試關於i 和 i的區別,如果沒有賦值的話,他們結果是沒區別的,關於他們的區別,我舉例說明 1 int i 0,a a i 這裡結...

關於C語言程式的問題,C語言上的問題abc1bc2的值a3,b4,c

setmem b,6 sizeof int 0 這個函式沒有定義 你這個函式是的意思應該是setmem,為b分配6個int長度的地址空間,並且每個偏移地址 回或是說b的元素 初答始為0了 void setmem int p int size,int value 你搜一下setmem這個函式宣告在哪個...