0xC0000005:访问冲突写入位置0xcccccccc

Pie*_*son -1 c++ pointers pass-by-reference

当我调用我的calculatePlaneEQ函数时,当我分配值时,它会抛出一个访问冲突...我的指针生锈了,但似乎这应该有效!

float *planeCoefA, *planeCoefB, *planeCoefC, *planeCoefD = NULL;
Run Code Online (Sandbox Code Playgroud)

呼叫:

calculatePlaneEQ (<...>, &planeCoefA, &planeCoefB, &planeCoefC, &planeCoefD);
Run Code Online (Sandbox Code Playgroud)

DEF:

void calculatePlaneEQ (<...>, float ** myXnorm, float ** myYnorm, float ** myZnorm, float** myD)
{
    float  xNorm = 1.3;
    float  yNorm = 1.4;
    float  zNorm = 1.5;
    float eqD = 1.6; 

    *(*myXnorm) = xNorm;
    *(*myYnorm) = yNorm;
    *(*myZnorm) = zNorm;
    *(*myD) = eqD;  
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 8

它应该是:

float planeCoefA, planeCoefB, planeCoefC, planeCoefD;
Run Code Online (Sandbox Code Playgroud)

呼叫:

calculatePlaneEQ (<...>, &planeCoefA, &planeCoefB, &planeCoefC, &planeCoefD);
Run Code Online (Sandbox Code Playgroud)

DEF:

void calculatePlaneEQ (<...>, float * myXnorm, float * myYnorm, float * myZnorm, float * myD)
{

    float  xNorm = 1.3;
    float  yNorm = 1.4;
    float  zNorm = 1.5;
    float eqD = 1.6; 

    *myXnorm = xNorm;
    *myYnorm = yNorm;
    *myZnorm = zNorm;
    *myD = eqD;
}
Run Code Online (Sandbox Code Playgroud)

更好的是,使用引用而不是指针:

呼叫:

calculatePlaneEQ (<...>, planeCoefA, planeCoefB, planeCoefC, planeCoefD);
Run Code Online (Sandbox Code Playgroud)

DEF:

void calculatePlaneEQ (<...>, float &myXnorm, float &myYnorm, float &myZnorm, float &myD)
{

    float  xNorm = 1.3;
    float  yNorm = 1.4;
    float  zNorm = 1.5;
    float eqD = 1.6; 

    myXnorm = xNorm;
    myYnorm = yNorm;
    myZnorm = zNorm;
    myD = eqD;
}
Run Code Online (Sandbox Code Playgroud)

这是比C语言使用指针更惯用的C++,并且不易出错.