0

私はこれらの質問がたくさん現れることを知っています、しかし私は無駄にすべてを試み/検索しました。

更新開始

テストクラス

#include "stdafx.h"

#include "testerClasser.h"

Tester::Tester(){

}

void Tester::GetNum(int * num){

    int num2 = 6;

    *num = num2;// error thrown here

}

GetNum関数の呼び出し例

int _tmain(int argc, _TCHAR* argv[])
{

    int* num = NULL;

    Tester* tester = new Tester();

    tester->GetNum(num);

    return 0;
}

エラーTester.exeの0x77c115deで未処理の例外:0xC0000005:アクセス違反の書き込み場所0x00000000。 更新終了

私には方法があります

void CCCamera::getEyeXYZ(float *pEyeX, float *pEyeY, float *pEyeZ) {

*pEyeX = m_fEyeX;
*pEyeY = m_fEyeY;
*pEyeZ = m_fEyeZ;

}

メソッドを呼び出そうとしました

float* pEyeX = new float(10);
float* pEyeY= new float(10);
float* pEyeZ= new float(10);
this->m_pCamera->getEyeXYZ (pEyeX,pEyeY,pEyeZ);

float* pEyeX;
float* pEyeY;
float* pEyeZ;
this->m_pCamera->getEyeXYZ (pEyeX,pEyeY,pEyeZ);

    float pEyeX;
float pEyeY;
float pEyeZ;
this->m_pCamera->getEyeXYZ (&pEyeX,&pEyeY,&pEyeZ);

彼らは明らかに私が欠けているものです誰かが助けることができますか?

4

3 に答える 3

5

NULL次のコードでは、関数内のポインターを逆参照しようとしていGetNumます。

int _tmain(int argc, _TCHAR* argv[])
{

    int* num = NULL;

    Tester* tester = new Tester();

    tester->GetNum(num); //will result in NULL pointer dereference inside GetNum!

    return 0;
}

必要なものはおそらく次のとおりです。

int _tmain(int argc, _TCHAR* argv[])
{
    int num = 0;

    Tester* tester = new Tester();

    tester->GetNum(&num); // pass a pointer to local variable

    return 0;
}
于 2012-08-20T18:48:20.317 に答える
0

それで、質問は何ですか?

最初のブロックは機能しますが、2番目のブロックは機能しません(「どこにも」を指すポインターはプログラミングには実際には存在しないため、多かれ少なかれランダムな場所を指しているだけです)、3番目のブロックは再び問題ありません。

于 2012-08-20T17:53:42.137 に答える
0

最初に行うことは、問題の原因となっているポインターを特定することです。thisあなたが報告した症状は、あなたのまたはthis->m_pCameraポインタに何か問題があることを強く示唆しています。パラメータポインタを試してみpEye...ても、おそらく問題とはまったく関係がないため、違いはありません。

于 2012-08-20T17:56:55.080 に答える