将指针返回指针数组会导致下一个元素失败

时间:2012-09-29 17:32:04

标签: c++ arrays pointers return element

我有一个功能,我用两个指针填充指针数组:

Vertex* MacePiece::getPositionOffset(int aDirection){
// returns Plate at Position aParent.myPlates[0]
BasePlate** theGroundPlate = this->getPlates();

Vertex* theOffset[] = {0,0};
switch(aDirection){

        theOffset[0] = theGroundPlate[0]->getVertexAt(0); //A
        theOffset[1] = theGroundPlate[0]->getVertexAt(1); //B
        break;

}

return theOffset[0];

}

接下来,我将该指针传递给第一个Element to Another函数的地址:

Vertex* theParentOffset = aParentPiece->getPositionOffset(aDirection);
theConnectingPiece->setPositionInMace(theParentOffset, aDirection); 

这里我使用的元素指向如下:

void MacePiece::setPositionInMace(Vertex* aOffset, int aDirection){
        // set groundplate position
    updateGroundPlatePositionByOffsetVertex(aOffset, aDirection);

}

void MacePiece::updateGroundPlatePositionByOffsetVertex(Vertex* aOffset, int aDirection) {
    BasePlate** thePlates = this->getPlates();

    // first update GroundPlate's Position

    Vertex* A = thePlates[0]->getVertexAt(0);
    Vertex* B = thePlates[0]->getVertexAt(1);
    Vertex* C = thePlates[0]->getVertexAt(2);
    Vertex* D = thePlates[0]->getVertexAt(3);

    switch(aDirection){

        case MOVE_NORTH:

            // still 3D thus 2D's y is 3D'z if camera is looking down Y

            // Two Sides are connecting thus Some Plate locations are identical

            // A.x defined by parent D.x
            A->position[0] = aOffset[1].position[0];
            // A.z defined by parent D.z
            A->position[2] = aOffset[1].position[2];

            //B.x defined by parent C.x
            B->position[0] = aOffset[0].position[0];
            //B.z defined by parent C.z
            B->position[2] = aOffset[0].position[2];

            // now set Opposit side (A->D, B->C), since moving north: 
            // x is the same
            // z is reduced by -1 because OpenGL's Z is reducing to far-pane
            D->position[0] = A->position[0];
            D->position[2] = A->position[2] - 1.0f;

            C->position[0] = B->position[0];
            C->position[2] = B->position[2] - 1.0f;

            break; 

具体来说这部分:

// A.x defined by parent D.x
                A->position[0] = aOffset[1].position[0];
                // A.z defined by parent D.z
                A->position[2] = aOffset[1].position[2];

                //B.x defined by parent C.x
                B->position[0] = aOffset[0].position[0];
                //B.z defined by parent C.z
                B->position[2] = aOffset[0].position[2];

aOffset [1]返回与aOffset [0]

相同的值

当我为数组传递一个**指针指向每个信息都丢失时。

我正在创造一种迷宫,它只是朝着一个方向失败。传递指针有什么问题?如何在Offset [1]中找到指向的右元素?

太烦人了。

干杯克努特

1 个答案:

答案 0 :(得分:0)

问题在于第一个功能。您将返回数组的第一个元素,它是一个指针。我认为你的目的是返回两个元素的数组,以便索引0和1访问你在第一个函数中指定的指针。使用现有数据结构没有简单的修复方法。一种解决方案是让第一个函数返回一个std :: pair。将两个指针分配到pair.first和pair .second,然后稍后将很容易访问这些值。