gpt4 book ai didi

clang - 在 clang 中对 std::vector(和其他容器)进行边界检查?

转载 作者:行者123 更新时间:2023-12-04 11:39:57 25 4
gpt4 key购买 nike

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

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

除了我想避免的“创建您自己的继承自 std::vector 的类型”之外,还有其他方法可以做到这一点吗?

(如果这有所不同,我将使用 clang 3.1 版。)

最佳答案

libstdc++有成熟的debug mode使用 -D_GLIBCXX_DEBUG .
libc++还有一个debug mode使用 -D_LIBCPP_DEBUG但正如我们看到的这个邮件列表 discussion: Status of the libc++ debug mode它是不完整的:

| My understanding is that this work was never completed and it's probably broken/incomplete.

That is correct. It’s on my list of things to fix/implement, but it’s not something that I will get to anytime soon.



它似乎适用于 std::vector3.4及以上 see it live ,给出如下程序:
#include <vector>
#include <iostream>

int main()
{
std::vector<int> v = {0,1,2,3} ;

std::cout << v[-1] << std::endl ;
}

它会产生以下错误:

vector[] index out of bounds

Aborted

关于clang - 在 clang 中对 std::vector(和其他容器)进行边界检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16467380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com