先說句題外話
vs反應有時候有點慢,改過的地方等幾秒才會顯示正確
另外有時候正確的地方會報錯,重啟吧
回到正題
“引發了異常: 寫入訪問權限沖突。
_Left 是 0xCDCDCDCD。
如有適用於此異常的處理程序,該程序便可安全地繼續運行。”
原因是在初始化棧時使用了malloc,而棧的自定義對象中有string
malloc只是分配內存,並不進行初始化,不調用類的構造函數,所以當以下這兩處調用發生的時候,都會出現錯誤
getline(cin, p->data); 還有
p = (DNode*)malloc(sizeof(DNode));
p->data = ss;
都是因為string對象的構造函數沒有被調用,沒有構建string對象。所以,getline函數無法調用string對象進行賦值,同樣,date也無法完成賦值。
同理,你修改后的程序,因為使用的是int類型替代string類型,所以沒有上面說的情況發生,所以可以運行。
解決辦法,用new代替malloc,
p = new(DNode);
new會調用相應類的構造函數完成初始化。
注意這樣做free棧時要用delete[]