未初始化指標

2021-09-23 14:36:04 字數 633 閱讀 8180

今天碰到個未初始化指標的問題。大意如下:

class a {

public :

b * m_pb;

class b {

blah, blah, blah ......

void func() {

a * pa;

b * pb = new b;

初始化pb......

pa->m_pb = pb;

std::vector< a * > aptrs;

apters.push_back( pa );

funcb( &aptrs, ...... );

函式func()在程式執行中會多次被呼叫,vc2010下開發。執行了乙個測試例子,結果看起來正常,但是仔細想,有一點問題。於是仔細分析除錯。進一步發現第一次呼叫func()一切執行正常,第二次執行時某些變數的資料不大對了。後來發現pa沒有初始化,給pa new乙個物件後結果就對了。

奇怪的是沒有賦值的pa也能正常使用一次,只是第二次pa指向的和第一次執行時同樣的記憶體,導致第二次執行時資料有點亂了(沒保持有序),從而導致演算法執行結果不對,才暴露出問題。查問題,編譯,執行,來回好幾次,共花了約4個小時。

如果定義pa時要麼後面跟new,要麼後面跟null就,就不需要查詢問題了。

未初始化指標問題

c和指標 書上說 int a a 12 這樣寫宣告乙個變數,但未對指標初始化 如果指標是函式的形參,比如 void func int a 樓主,你應該理解清楚什麼是指標 通俗的講,指標是乙個位址,指標的初始化就是讓指標指向乙個確定的位址。是指標的解引用符,意思是取指標指向的位址裡的資料。因此,int...

未初始化的指標

1.我們定義了乙個指標,一定要初始化,比如 int a,沒有初始化時,a的指向是不明確的。若它指向非法位址,這時的操作會報異常 若它指向乙個合法位址,這是非常危險的,因為這樣可能更改乙個正在使用的數值。若在mcu中,指標指向非法位址,程式會跑飛。2.關於null指標,有時我們會寫乙個函式,這個函式返...

未初始化和非法的指標

下面這個 說明了乙個極為常見的錯誤 int a a 12 警告 究竟a應該指向 我們宣告了這個變數,但從未對它進行初始化,所以我們沒有辦法 12這個值儲存於什麼地方。從這一點看,指標變數和其他變數並無區別,如果變數是靜態的,它會被初始化為0.但如果變數是自動的,它根本不會被初始化。無論哪種情況,宣告...