C++ 返回指向指针数组的指针获取下一个元素失败

C++ 返回指向指针数组的指针获取下一个元素失败,c++,arrays,pointers,return,element,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] =

我有一个函数,其中我用两个指针填充指针数组:

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];
}

接下来,我将带第一个元素地址的指针传递给另一个函数:

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]相同的值

当我为指向每个信息的数组传递**指针时,所有信息都会丢失

我正在创造一个迷宫,但它只在一个方向上失败。传递那个指针有什么问题?如何获得偏移量[1]中指向的正确元素

太可怕了


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

您好,谢谢您的回答。我尝试将其作为顶点**返回,但后来我丢失了一些值。我不明白为什么它们会消失。它们没有被覆盖。这是相同的电话交互。但是用**代替。我将再次更改它,并查看发生了什么情况顶点**将不起作用,因为您将返回数组的地址,该数组是一个局部变量。我现在只使用第一个顶点,并计算由于该顶点而产生的其余顶点:D