關於free()棧的記憶體的時,無法繼續執行問題(求助)
最近學習資料結構,用C語言寫了棧的基本操作,卻發現在銷燬棧時,初始尺寸STACK_INIT_SIZE改成10,1000可以順利執行,改成100無法執行(編譯都沒問題),這讓我無法理解。下面是程式碼和執行的結果,希望有懂得朋友能幫助解釋下,是程式碼問題還是其他問題。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
//STACK_INIT_SIZE改成10,1000可以順利執行,改成100無法執行!
#define STACK_INIT_SIZE 10
#define STACK_INCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *base;
ElemType *top; //棧頂指向準備存放的位置
int stackSize; //當前可以使用的最大容量
}SqStack;
Status initStack(SqStack *s){
s->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
sizeof(SElemType)
if(!(s->base)){
return false;
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
return true;
}
Status push(SqStack *s,ElemType e){
//如果棧滿(s->top - s->base = s->stackSize),追加空間
if(s->top - s->base >= s->stackSize){
s->base = (ElemType*)realloc(s->base , (s->stackSize + STACK_INCREMENT) * sizeof (ElemType));
if(!(s->base)){
return false;
}
s->top = s->base + s->stackSize ; //設定棧頂
s->stackSize = s->stackSize + STACK_INCREMENT; //設定棧的最大容量
}
//進棧時先存入資料於棧頂,棧頂指標再往後移
*(s->top) = e;
s->top ++;
return true;
}
Status pop(SqStack *s , ElemType *e){
//棧為空
if(s->top == s->base){
return false;
}
//出棧時棧頂指標先往前移,再取出棧頂資料
(s->top)--;
*e = *(s->top);
return true;
}
int getCapacity(SqStack *s){
return s->top - s->base;
}
Status clearStack(SqStack *s){
s->top = s->base ;
return true;
}
Status destroyStack(SqStack *s){
s->top = s->base + s->stackSize;
while(s->top != s->base){
free(--s->top); //執行到這程式停止!
cout<<*(s->top)<<" ";
}
s->top = s->base = NULL;
s->stackSize = 0;
cout<<"\n";
return true;
}
int main(int argc, char *argv[])
{
SqStack s;
initStack(&s);
ElemType e = 1;
ElemType elm;
push(&s,e);
e = 2;
push(&s,e);
e = 3;
push(&s,e);
e = 4;
push(&s,e);
e = 5;
push(&s,e);
e = 6;
push(&s,e);
pop(&s,&elm);
cout<<elm<<" ";
pop(&s,&elm);
cout<<elm<<" ";
pop(&s,&elm);
cout<<elm<<" ";
pop(&s,&elm);
cout<<elm<<" ";
pop(&s,&elm);
cout<<elm<<"\n";
cout<<"Capacity:"<<getCapacity(&s)<<"\n";
clearStack(&s);
cout<<"Capacity after clear the stack:"<<getCapacity(&s)<<"\n";
destroyStack(&s);
//cout<<getCapacity(&s)<<"\n";
//cout<<clearStack(&s)<<"\n";
return 0;
}
STACK_INIT_SIZE為10的執行結果,程式正常結束。
STACK_INIT_SIZE為100的執行結果,程式終止。
STACK_INIT_SIZE為1000的執行結果,程式正常結束。
相關推薦
關於free()棧的記憶體的時,無法繼續執行問題(求助)
最近學習資料結構,用C語言寫了棧的基本操作,卻發現在銷燬棧時,初始尺寸STACK_INIT_SIZE改成10,1000可以順利執行,改成100無法執行(編譯都沒問題),這讓我無法理解。下面是程式碼和執行的結果,希望有懂得朋友能幫助解釋下,是程式碼問題還是其他問題
由於找不到 MSVCR100.dll,無法繼續執行代碼
log clas 安裝程序 安裝 .dll 管家 可能 解決 ges 由於找不到 MSVCR100.dll,無法繼續執行代碼。重新安裝程序可能會解決此問題 360軟件管家中找到 進行安裝即可由於找不到 MSVCR100.dll,無法繼續執行代碼
由於找不到 opencv_world320.dll,無法繼續執行程式碼
首先找到自己軟體安裝(解壓)的路徑openCV (安裝(解壓)目錄\opencv\build\x64\vc14\bin) 我的安裝(解壓)目錄是:F:\OpenCV\Three320\opencv\build\x64\vc14\bin
關於小米6 執行安裝時,提示安裝失敗(BAIDU_LOCATION_SERVICE)
定位SDKv3.1版本之後,以下許可權已不需要,請取消宣告,否則將由於Android 5.0多帳戶系統加強許可權管理而導致應用安裝失敗。 <uses-permission android:nam
mysql安裝問題記錄MSVCR120.dll檔案丟失,無法正常啟動(0xc000007b),初始化失敗
並先執行第一個檔案安裝.NET 2.0、.NET 3.5等 然後安裝第二個檔案進行安裝 最後初始化失敗 原因:my.ini檔案格式是utf-8 解決辦法,my.ini檔案儲存為ANSI格式檔案
JS拼接時,function傳遞ID(UUID)引數值不準確問題
問題描述:此處我們傳遞的引數ID是Oracle資料裡面資料的ID,我使用的是MybatisPlus中的IdWorker.getId()這樣的 需要傳遞資料ID,類似於:870191925104693248,859678698633596928這樣的資料 是通過拼接傳遞的
IE9的console不兼容問題 (在控制臺打開代碼中要顯示的結果,數據到了conso這裏無法繼續執行)
() 代碼 發現 習慣 csdn out 停止 size rom 轉自 http://blog.csdn.net/ywl570717586/article/details/53084655 今天發現並不是所有瀏覽器都像Google chrome一樣,可以正常使用cons
伺服器無法繼續執行該事務,此會話中的活動事務已由另外一個會話提交或終止。
//執行事務處理 public void DoTran() { //建立連線並開啟 SqlConnection myConn=GetConn(); myConn.Open(); SqlCommand myComm=new SqlCo
laravel框架學習(三)win下php artisan tinker 測試資料時,無法執行報錯的解決方法
問題描述: 複製該路徑,在資源管理器的位址列中開啟,會看到 如下: Temp 往往是系統或者其他軟體生成的快取檔案或目錄 需要返回到上一級目錄Temp中,全選資料夾,刪除,提示不允許刪除的話,
Discuz出現對不起,您安裝的不是正版應用,安裝程式無法繼續執行解決方法
Discuz安裝非應用中心的部分模版外掛會提示“對不起,您安裝的不是正版應用,安裝程式無法繼續執行”,如下圖所示: 這是應用中心的一個版權保護措施,由開發者選擇是否開啟。解決方法如下: 1、用記事本打:/source/ function/ 目錄下的function_clo
C 語言執行free()釋放記憶體時 報錯
今天遇到了一個問題。先用malloc()分配一定大小的記憶體,然後在主函式最後要對這些記憶體進行釋放。呼叫free函式,執行報錯。單步除錯 執行free()後的報錯如圖 1所示。 最終發現我是這樣做的:例如 分配10個元素記憶體,我對這10個元素進行了賦值,最後是呼叫了fr
導入swaggerDemo時,無法識別工程的解決辦法
ger log 工程 無法 nbsp img logs wid 技術 1、在已建立的Java工程中,拷貝至demo中 2、打開.project修改工程名為demo的名字即可。 導入swaggerDemo時,無法識別工程的解決辦法
【Python】程序在運行失敗時,一聲不吭繼續運行pass
pass語句 found col con top path count nts 一聲 在前面程序出現異常時,我們都會給一個提示,告訴用戶,程序為什麽會異常,但是現在我們想在程序出現異常時,不做處理,讓程序默默的往下執行,不要做聲。 那麽我們就引入了pass語句 def co
【BIEE】05_啟動BIEE時,無法啟動BI_SERVER
ini ora biee style server clas gin 無法啟動 onf 本地修改資料庫後,重新啟動BIEE,結果報錯: 點擊【查看日誌信息】後 從這裏是沒看出是什麽問題造成的,那麽我們就要去查詢啟動日誌了 問題解決 找到日誌路徑:D:\obiee\in
(轉)html 表單提交時,無法獲取到disabled屬性的input值
有效 AS 單元 java check bsp ado 控件 下拉框 input的字段當為disabled是,無法獲取值,無法改變值,所以在表單提交時,獲取不到值。可以用randomly解決這個問題。 <input name="country" id="countr
解決dva dispatch yield生成器函數中異常中斷,無法繼續調用的問題
fine defined login 決定 log 返回 spa def clas 在生成器函數中,哪怕是一點報錯。都會導致程序無法再次執行。這是yield的特性導致的。最簡單的解決方案,就是將所有報錯回避,並且做好交互。 1、將所有可能異常的地方判斷好,不讓代碼繼續執
Jquery等待ajax執行完畢繼續執行(斷點調試正常,運行異常)
.ajax cti cati 時間 utf 一個 ajax 發現 not 以前寫過一個程序,發現用斷點調試的時候,一步步的運行,程序是可以的,但是去了斷點程序就出現了問題。 $(document).ready(function(){ var arra=new A
gdb watch 除錯時,無法watch
伺服器實際執行時, 某個物件的某個變數不知道啥時候被改掉了。 用valgrind查了 ,沒有記憶體越界, 那就是邏輯上有問題。 這種情況 gdb 的 watch功能就非常好用。 它能檢測記憶體中的值被改了,就會自動斷點。
Jquery等待ajax執行完畢繼續執行(斷點除錯正常,執行異常)
以前寫過一個程式,發現用斷點除錯的時候,一步步的執行,程式是可以的,但是去了斷點程式就出現了問題。 $(document).ready(function(){ var arra=new Array(); &n
maven打包後flash檔案變大,無法正常執行
最近一個老專案重構,前臺使用了swfupload來實現多檔案上傳,這是一個用flash實現的外掛。 開發階段,打包測試時均無問題。測試階段,在伺服器部署後,該外掛就莫名失效了。 經過排查最終確認是maven打測試包時,加上了資源過濾導致swfupload.swf檔案變大。