[問題] 例外狀況: 0xC0000005

看板C_and_CPP作者 (安卓)時間13年前 (2012/04/26 12:31), 編輯推噓4(409)
留言13則, 5人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 在使用linked list寫tree時, compile有過,run time時卻出現了例外狀況: 0xC0000005, 不知道要怎麼辦@@ 程式碼(Code):(請善用置底文網頁, 記得排版) struct node{ string val; struct node * left, * right; }; typedef struct node item;item * curr,* root; int main(){ string pre[26]; getline(cin,pre[0]); curr = (item *)malloc(sizeof(item)); curr->val = pre[0];//這一刪掉就不會出現錯誤... curr->left = NULL; curr->right = NULL; root = curr; return 0; } 謝謝耐心看完的前輩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.1.134

04/26 20:37, , 1F
問題其實出在上一行XD
04/26 20:37, 1F

04/26 20:37, , 2F
struct node不是POD, 一定要用new 不能malloc
04/26 20:37, 2F
改成new就可以了~ 什麼是POD押? 可是我上一個作業這樣寫,執行時沒有出現這個錯誤耶... 謝謝AstralBrain前輩 ※ 編輯: h94jo3cl4 來自: 140.116.1.134 (04/26 20:41)

04/26 20:42, , 3F
Plain Old Data, string 不是
04/26 20:42, 3F
了解了!!謝謝johnlinvc前輩!!! 如果struct node是POD,就要使用malloc不能使用new嗎? ※ 編輯: h94jo3cl4 來自: 140.116.1.134 (04/26 20:46)

04/26 21:03, , 4F
不用想太多,寫 C++ 就全部用 new 就好了
04/26 21:03, 4F
謝謝purpose前輩,這樣方便多了XDD ※ 編輯: h94jo3cl4 來自: 140.116.1.134 (04/26 21:08)

04/26 22:31, , 5F
如果一定要用malloc,把string改成別的基礎型別也行
04/26 22:31, 5F

04/26 22:31, , 6F
int或char []之類的
04/26 22:31, 6F

04/26 23:19, , 7F

04/26 23:20, , 8F
如果單純要呼叫string的建構子,可以用replacement new
04/26 23:20, 8F

04/26 23:21, , 9F
但是在記憶體釋放前要手動呼叫解構子
04/26 23:21, 9F

04/26 23:43, , 10F
我覺得 replacement new 強調的是寫自訂的 operator new
04/26 23:43, 10F

04/26 23:44, , 11F
函數,取代原本內建的。而 placement new 比較適合強調
04/26 23:44, 11F

04/26 23:44, , 12F
在特定位址建構新物件
04/26 23:44, 12F

04/26 23:54, , 13F
筆誤,這裡用的是placement new才對
04/26 23:54, 13F
文章代碼(AID): #1FcK0Uvz (C_and_CPP)
文章代碼(AID): #1FcK0Uvz (C_and_CPP)