用可以检查边界 c++ 的东西替换数组的最接近的解决方案

Nearest possible solution to replace arrays with something that could check bounds c++

本文关键字:替换 数组 最接近 解决方案 检查 边界 c++      更新时间:2023-10-16

我有 ~15'000 行 C/C++ 程序,其中的某个地方 - 简单的数组是在边界之外使用的(这是我的猜测),发生"未定义行为"的原因(好吧,不,我的 cdrom 不是随机打开的),但堆内存是从代码中的某个地方修改的! 一些定义的整数内存只是进入无法访问的随机内存异常,它不应该发生, 如果我删除或更改任何异常发生在其他地方,奇怪而可怕......因此,我需要用任何可以正确检查边界的数组替换 100 个数组。而且任何东西都需要最少的修改。

我可以创建一个模仿数组行为但检查边界的类,这样我就可以轻松更改所有数组吗? 或者在这种情况下你会提供哪种解决方案?我对 c++ 有点陌生,任何例子对我来说都是金子。

我正在使用 Windows 7,通过说简单数组,我的意思是:

int data[400];
data[20] = 4; // its fine
data[-13] = 9; // opens cdrom, or formats hard drive, or works till your windows gets updated

一个简单、安全的 C++ 数组,用于检查边界...你听说过std::array吗?

http://en.cppreference.com/w/cpp/container/array/at

堆内存的意外修改可能是由于数组边界冲突造成的。

这也可能是由于取消引用悬空指针。 根据我的经验,这更有可能。

在 15000 行代码中,解决这个谜团的最快方法是花时间弄清楚如何使用像 valgrind 这样的工具。

既然你说你在C++有点新,你应该注意标准库的模板容器(如边界可检查std::array)、基于范围的 for 循环和智能指针可以防止我提到的这两个问题。

您可以尝试的最简单的方法是与调试malloc库链接。没有代码更改,它可能会捕获堆分配数组中的溢出。如果没有捕获,那么很可能是堆栈上的坏东西

在linux上最常用的是电子围栏,对我帮助很大

有这个库到Windows的端口,

http://sourceforge.net/projects/duma/

https://code.google.com/p/electric-fence-win32/