相关疑难解决方法(0)

C++:向量边界

我来自Java并且正在学习C++.我正在使用Stroustrup的Progamming原则和使用C++的实践.我现在正在使用矢量.在页117,他说,访问向量的不存在元素将导致运行时错误(在Java中相同,索引超出范围).我正在使用MinGW编译器,当我编译并运行此代码时:

#include <iostream>
#include <cstdio>
#include <vector>

int main() 
{ 
    std::vector<int> v(6);
    v[8] = 10;
    std::cout << v[8];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我作为输出10.更有趣的是,如果我不修改不存在的向量元素(我只打印它期望运行时错误或至少是默认值)它会打印一些大整数.那么...... Stroustrup是错误的,还是GCC有一些编译C++的奇怪方法?

c++ gcc mingw vector bounds

11
推荐指数
3
解决办法
9763
查看次数

在clang中检查std :: vector(和其他容器)的边界?

在clang中,有没有办法启用边界检查[]访问std :: vectors和其他STL容器,最好只在调试模式下构建?

我花了好几个小时寻找一个微妙的错误,结果是我们访问了std :: vector的末尾.当它检测到错误时,它不需要做任何聪明的事情,只需在调试器中陷阱,以便我可以找到它发生的位置并在代码中修复它.

除了"创建继承自std :: vector的自己的类型"之外,有没有办法做到这一点,我想避免哪些?

(如果这有所不同,我正在使用clang 3.1版.)

clang stdvector

7
推荐指数
1
解决办法
1861
查看次数

标签 统计

bounds ×1

c++ ×1

clang ×1

gcc ×1

mingw ×1

stdvector ×1

vector ×1