缓冲区溢出 - 数组索引越界(严重)

Buffer Overflow - Array Index Out of Bounds (Critical)

本文关键字:严重 越界 索引 溢出 数组 缓冲区      更新时间:2023-10-16

这是我的代码。

这是我得到的错误。

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;

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

你需要改变matrix_mul3x1的主体:

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

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

在您的情况下,您也可以使用元组而不是结构。

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