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

Returning Pointer to an Array of Pointers get next element fail

本文关键字:指针 下一个 元素 失败 获取 数组 返回      更新时间:2023-10-16

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

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::p air。将两个指针分配给 pair.first 和 pair .second,然后以后可以轻松访问这些值。