-1

这是我的代码。

这是我得到的错误。

Buffer Overflow - Array Index Out of Bounds (Critical)
 > - Code: ABV.MEMBER --> i_rgb_to_xyz()
 > - Message: Array '&(xyz.x)' of size 1 may use index value(s) 2.


// Go through all input rgb's and push result to output vector
    for (auto pt : rgb)
    {
        point_xyz xyz;
        matrix_mul3x1(M, &pt.r, &(xyz.x));     //this line is the error line
        output.push_back(xyz);
    }


void matrix_mul3x1(const double* A, const double* B, double* C)
{
    C[0] = A[0] * B[0] + A[1] * B[1] + A[2] * B[2];
    C[1] = A[3] * B[0] + A[4] * B[1] + A[5] * B[2];
    C[2] = A[6] * B[0] + A[7] * B[1] + A[8] * B[2];
}

这是 rgb 的定义

const vector<point_rgb>& rgb

这是 point_rgb 的定义

typedef struct
{
    double r;
    double g;
    double b;
} point_rgb;

这是 point_xyz 的定义

typedef struct
{
    double x;
    double y;
    double z;
} point_xyz;

有人可以建议如何解决这个问题吗?我真的不明白这个发条错误。

4

1 回答 1

1

你需要改变matrix_mul3x1's 的身体:

void matrix_mul3x1(const point_xyz* A, const point_rgb* B, double* C)
{
    C[0] = A->x * B->r + A->y * B->g + A->z * B->b;
    // ....
}

您不能访问将其视为数组的结构的成员。

在您的情况下,您也可以使用tuple而不是 struct 。

using data = std::tuple<double, double, double>;
void matrix_mul3x1(const data& A, const data& B, data& C)
{
    std::get<0>(C) = std::get<0>(A) * std::get<0>(B) ...;
    // ....
}
于 2019-12-08T12:33:58.330 回答