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這個函式宣告在哪個...