template 不正確的使用指標堆疊

2021-06-04 02:20:09 字數 998 閱讀 4004

假設定義了乙個正確的stacktemplate,乙個簡單的堆。

三個容易出錯的範例:

stackst;

版本1:

string po;

替換為:

char* po;

旨在使用char指標而不是string物件來接受鍵盤的輸入。這種方法失敗的原因是,char指標僅僅是建立了指標(4位元組大小),沒有非配任何用於儲存輸入字元的空間。程式編譯通過,但是執行時出現segment error。

版本2:

string po;

替換為:

char po[40];

這裡為輸入的字元分配了space,另外po的type是char*,因此可以被放在堆疊中。但是陣列完全和pop方法的假設相衝突。

templatebool stack::pop(t &item)

else

return false;

}

首先,引用變數item必須引用某種型別的左值,而不是陣列名。其次,**假設可以給item賦值,即使item能夠引用陣列,也不能為陣列名賦值。

(這樣的說法不是很懂,請高手指點。。。。。)

版本3:

string po;

替換為:

char *po=new char[40];

這位輸入的字串分配了空間。另外,po是變數,因此與pop的**相容。不過,po變數只有乙個,總是指向相同的位址空間(neicunspace),當入stack得時候,都是講數值插入到正確的地方,數值也正常,但是所有的stack單元都是指向同一塊位址,因此不管插入多少,所有的stack單元存放的都是最後乙個插入的數值。當輸出時,取得的value都是同乙個(最後插入的)。具體的說,堆疊並沒有儲存每乙個新的字串,因此沒有任何用途。

解決方法:請參考這篇博文。

1、使用指標數值。

C 輸入格式不正確

機房收費系統統計乙個操作員結賬情況時,對充值 退卡 收費進行求和查詢。報錯我的d層沒毛病的 是這樣寫的 sqlhelper.sqlhelper sqlhelper new sqlhelper.sqlhelper sqlparameter sqlparams1 string sql1 select s...

MySQL order by 排序結果不正確

新建一張測試表 create table tb1 id bigint 20 not null auto increment,a decimal 19,2 not null,acid bigint 20 not null,prid bigint 20 not null,primary key id k...

VarFormat的不正確使用導致記憶體洩漏

varformat的不正確使用導致記憶體洩漏 乙個很弱智的錯誤 如下 variant t var dblvalue cstring sout bstr bstrout sout.allocsysstring varformat var,l 0.0,0,var format nosubstitute,...