【发布时间】:2019-08-28 11:50:11
【问题描述】:
我在下面的无用程序中在 gcc 中设置调试模式:
#define _GLIBCXX_DEBUG 1
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v{1,2,3};
for(int i=0; i<100000000000000;i++)
cout<<v[i];
}
程序让我知道我的索引超出范围。但是,如果我颠倒前两行的顺序,我不会收到这样的错误消息(#include 在#define 之前)。为什么是这样?有没有办法在程序的另一行上切换调试模式(没有编译器标志)?我问是因为我正在解决 Leetcode.com 上的问题,我无法传递编译器标志或修改问题的第一行。
【问题讨论】:
-
我不相信这是对stackoverflow.com/questions/31816095/… 的直接欺骗,所以我重新打开了它。但该链接中的建议仍然适用。
-
@NeilButterworth 谢谢,它肯定不是,因为如果我只包含 iostream 和 vector,问题仍然是完全相同的。
-
请相应地编辑您的问题。
-
@NeilButterworth Cm'on
#define _GLIBCXX_DEBUG 1 #include <bits/stdc++.h> using namespace std;可能是你能做的最糟糕的事情。 -
就您的用例而言,您始终可以在提交之前在本地编译和测试,或者使用 Wandbox 等在线环境。