防止C/C++中的缓冲区溢出

2 c c++ buffer-overflow

很多次我遇到Buffer Overflow问题.

int y[10][10][10];
Run Code Online (Sandbox Code Playgroud)

...

y[0][15][3] = 8;
Run Code Online (Sandbox Code Playgroud)

我该如何防止这个问题?有什么好的工具可以帮助我吗?

Ric*_*dle 10

在一般情况下,Neil的答案更好,但是如果你有理由使用普通旧数组,你可以使用函数来获取和设置值,并检查你是否在数组边界内:

#define MAX_INDEX 10

int y[MAX_INDEX][MAX_INDEX][MAX_INDEX];

int get_y(int a, int b, int c)
{
    ASSERT(a >= 0 && a < MAX_INDEX);
    ASSERT(b >= 0 && b < MAX_INDEX);
    ASSERT(c >= 0 && c < MAX_INDEX);
    return y[a][b][c];
}

void set_y(int a, int b, int c, int value)
{
    ASSERT(a >= 0 && a < MAX_INDEX);
    ASSERT(b >= 0 && b < MAX_INDEX);
    ASSERT(c >= 0 && c < MAX_INDEX);
    y[a][b][c] = value;
}
Run Code Online (Sandbox Code Playgroud)

......理想情况下,所有人都在课堂上.


小智 9

不要使用原始C风格的数组.相反,使用诸如std :: vector之类的C++容器类,它们能够检查无效访问并在异常访问发生时引发异常.

此外,您所描述的并不是真正的缓冲区溢出.