缓冲区溢出-数组索引超出范围(严重)

时间:2019-12-08 12:20:32

标签: c++ klocwork

这是我的代码。

这是我得到的错误。

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;

有人可以建议如何解决此问题吗? 我不太了解这个发条错误。

1 个答案:

答案 0 :(得分:1)

您需要更改frame.setLayout(new GridBagLayout());的正文:

matrix_mul3x1

您无法访问将其视为数组的结构的成员。

根据您的情况,您也可以使用tuple代替struct。

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;
    // ....
}