我的任務是在C/C++中編寫更簡單的編譯器。 main()函數調用下面的函數parse_program()以讀取控制檯的所有輸入並將其存儲在鏈接列表圖中。爲什麼在使用指針(C++)時會出現未初始化的堆內存錯誤?
出於某種原因,我的程序違反此:
while (node != NULL){
if (node->id == ID) //Breaks here
...;
node = node->next;
}
隨着內存訪問衝突在0xCDCDCDCD。對此的研究表明我有未初始化的堆內存。稍做實驗後,我意識到在創建節點後,立即在位置0xCDCDCDCD處選擇node-> next。
struct Node* parse_program(){
struct Node* node = new Node;
cout << node;
cout << node->next;
...;
return node;
}
輸出
0044A940
CDCDCDCD
上述功能是在程序中調用的第一件事。我確實有全局變量。
我是否爲節點分配內存不正確?即使在調用數組/指針之前,單元化數組/指針或程序中其他地方的某個東西是否會導致錯誤?
感謝您的任何建議。我很難從哪裏開始尋找問題。
你正確地分配了節點 - 你期望node-> next point,你沒有把它設置爲任何東西,所以它包含垃圾。 – pm100 2014-11-21 00:45:22
Node的構造函數是什麼樣的? – razeh 2014-11-21 00:46:25