指针访问冲突问题

时间:2012-08-20 17:48:57

标签: c++ pointers

我知道会出现大量这些问题,但我已经尝试/搜索过一切都无济于事。

更新开始

测试类

#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;

*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);

他们显然是我所缺少的,任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

那么问题是什么?

第一个块工作,第二个块不工作(指针'无处',实际上并不存在于编程中,因此它们只是指向或多或少的随机位置),第三个块再次正常。

答案 2 :(得分:0)

要做的第一件事就是找出导致问题的指针。您报告的症状强烈表明您的thisthis->m_pCamera指针存在问题。尝试使用参数pEye...指针将没有任何区别,因为它们可能与该问题毫无关系。