【问题标题】:C++ vector of strings segfault字符串段错误的 C++ 向量
【发布时间】:2017-02-02 01:06:40
【问题描述】:

谁能告诉我为什么会出现这个段错误?

vector<string> vec;
for (int i = 0; i < 1000000; /* 1 million */ i++) {
    vec.push_back("string"+i);
}

g++-std=c++14 中编译

【问题讨论】:

  • 你认为"string"+i实际上做了什么?
  • @πάνταῥεῖ 连接
  • 它没有。它应用了奇怪的指针算术。您正在访问超出范围的地址,并且您没有访问权限。
  • @iPherian C++ 与您所知道的其他语言不同。你应该开始here
  • @KyleStrand:然后是 const 数组 char

标签: c++ string vector c++14


【解决方案1】:

正如 panta-rei 正确指出的那样,您似乎正在尝试包含格式为

的字符串
"string" + string form of (i)

但你实际上是在做指针运算,在这种情况下这是不合逻辑的(你只是从某个位置传递一个递增的指针i - 谁知道那个内存中有什么?)。

为了做您想做的事,您可以使用std::to_string,它将i 转换为正确的C++ 字符串。添加一个 C 风格的字符串,is OK

将你的线路改为

vec.push_back("string"+to_string(i));

【讨论】:

    【解决方案2】:
    vector<string> vec;
    for (int i = 0; i < 1000000; i++) {
        vec.push_back("string" + to_string(i));
    }
    

    这不是 PHP...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多