我遇到了一個我無法解釋的奇怪的東西。指針成員默認情況下不會初始化爲零(僅在第二次發生時)。我知道我忘了在構造函數中初始化它,並在d-tor中釋放內存。但我無法解釋爲什麼指針默認未初始化爲零。下面是工作的僞代碼。我貼出來是爲了向你們展示我的意思。在我真實的代碼中,它要複雜得多。爲什麼指針成員初始化爲非零?
到目前爲止,我的猜測是有內存泄漏的地方。如果有更多的可能性,我希望聽到您的消息。謝謝。
#include <iostream>
class A {
public:
int *p;
A() {std::cout << "p in ctor: " << p << std::endl;}
~A() {}
void f(int *i) { p = i;}
};
int main() {
A *a = new A();
int c = 0;
a->f(&c);
std::cout << "p in step 1:" << a->p << std::endl;
delete a;
A *b = new A();
std::cout << "p in step 2:" << a->p << std::endl;//here works but not in real code
}
'默認情況下'指針是未初始化的。如果你沒有手動初始化它,它可能是任何東西(調試版本已知的非空常量,發佈的隨機垃圾) – keltar
你應該初始化你的變量並且知道它。 –
因爲'int * p',最好使用'int * p = NULL',因爲你正在做的事是未定義的行爲 – Najzero