如何在 Linux 上强制执行向量下标超出范围调试断言

Posted

技术标签:

【中文标题】如何在 Linux 上强制执行向量下标超出范围调试断言【英文标题】:how to enforce vector subscript out of range debug assertion on linux 【发布时间】:2017-07-14 13:32:57 【问题描述】:

此代码适用于 linux。

#include <vector>
#include <iostream>

using namespace std;


int main () 

    vector<int> v(10, 0);

    cout << v[100];

    return 0;

operator[] 用注释声明

      // element access
      /**
       *  @brief  Subscript access to the data contained in the %vector.
       *  @param __n The index of the element for which data should be
       *  accessed.
       *  @return  Read/write reference to data.
       *
       *  This operator allows for easy, array-style, data access.
       *  Note that data access with this operator is unchecked and
       *  out_of_range lookups are not defined. (For checked lookups
       *  see at().)
       */
      reference
      operator[](size_type __n) _GLIBCXX_NOEXCEPT
       return *(this->_M_impl._M_start + __n); 

但 MSVS 编译器会警告此类下标超出范围的情况。有什么方法可以模仿它的行为吗?

【问题讨论】:

Related. thx,C (libc) 有类似的东西吗? 我不知道。 【参考方案1】:

其实我的一个同事已经找到了想要的答案:

-D_GLIBCXX_DEBUG

标志激活 libstdc++ 的调试模式。

【讨论】:

以上是关于如何在 Linux 上强制执行向量下标超出范围调试断言的主要内容,如果未能解决你的问题,请参考以下文章

调试断言失败,向量下标超出范围

向量下标超出范围,错误仅在调试模式下显示

C++ 调试断言失败。向量下标超出范围

(opencv) 调试断言失败,向量下标超出范围

调试断言失败(向量下标超出范围)

MPI_Gatherv 向量下标超出范围