當我在 Codeblocks 上編碼時,我一直試圖找出這個問題,但沒有任何運氣。
所以基本上我在函式中有以下代碼:
Node * newNode;
newNode->data = num;
//root is defined somwhere at the top as 'Node * root';
root->adj.push_back(newNode);
和以下結構:
struct Node{
int data;
vector<Node*> adj;
};
當我對向量執行 push_back 時,程式僅回圈 2-3 秒并以非零退出代碼退出。如果我動態分配記憶體它似乎作業正常。當指標未指向特定的記憶體塊時,程式是否會以某種方式崩潰?
uj5u.com熱心網友回復:
未指向物件的“遍歷”指標在 C 中是未定義的行為。
指標不必指向動態分配的物件,但這是典型的。指標可以指向自動存盤物件。例如:
Node bob;
Node* root = &bob;
但是,在任何情況下,您都有責任管理這些物件的生命周期。自動存盤物件存活到當前作用域結束,臨時物件存活到當前完整運算式結束,動態分配物件存活到它們deleted。
智能指標可以幫助解決生命周期管理問題,但它們只會有所幫助。他們沒有解決它,你仍然必須意識到生命周期。
許多后 C 語言具有自動垃圾收集功能,可以減少程式員的生命周期問題。您在 C 中沒有此幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495874.html
