0

私は説明できない奇妙なことに出くわしました。ポインター メンバーは、既定ではゼロに初期化されません (2 回目にのみ発生します)。コンストラクターで初期化し、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
}
4

2 に答える 2

1

明示的に行わない場合、組み込み型のメンバーはゼロで初期化されません

于 2013-10-10T09:03:20.677 に答える