0

初期化されていないオブジェクトポインタをメソッドに渡したい。newそのメソッド内で、演算子(または)を使用してオブジェクトのインスタンスを作成mallocし、渡されたポインターにそのアドレスを割り当てます。これは私のコードの一部です:

void test(testClass* t){
    ...
    t = new testClass();
    ...
}

int _tmain(int argc, _TCHAR* argv[])
{
    testClass* t = NULL;
    test(t);
    cout<<t->getTestValue()<<endl;
    delete t;
}

私の問題は、が指すオブジェクトのメソッドを呼び出したい_tmain関数(呼び出し後)にあります。ここで私のプログラムはクラッシュし、アクセス違反の予期しない例外で終了します。testgetTestValuet

動的に(演算子newやを使用してmalloc)作成されたオブジェクトは、関数のスコープ外では使用できないようですtest。誰か助けてもらえますか?

4

1 に答える 1

2

関数内のポインターを変更するには、参照によって渡される必要があります。

void test(testClass*& t)

それ以外の場合、関数内で行われた変更は外部に表示されません。

元のポインタは変更されず、そのまま残るNULLため、未定義の動作とクラッシュが発生します。

パラメータを値で渡すと、関数内にコピーが作成されます。ですから、そうするとき、あなたは実際にあなたのポインターのコピーt = new testClass();に取り組んでいます。

于 2012-06-07T07:37:40.673 に答える