std::string 附加分段错误

0 c++ string segmentation-fault

我在解决leetcode问题https://leetcode.com/problems/largest-number/时遇到以下错误。

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create
Run Code Online (Sandbox Code Playgroud)

因此,我在本地运行了类似的代码,它给了我分段错误。(顺便说一句,当向量大小较小(例如 10)时,它可以毫无问题地运行。我已经阅读了解决方案,所以我知道有更好的方法来解决这个 leetcode 问题。我只是想知道这个分段错误的细微差别。

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<string> arr(100, "0");

  sort(arr.begin(), arr.end(), [](string &x, string &y) {
    string a = x;
    string b = y;
    a.append(y);
    b.append(x);
    int n = a.length();
    for (int idx = 0; idx < n; ++idx) {
      if (a[idx] != b[idx]) 
        return a[idx] > b[idx]; 
    }
    return true;
  });
}
Run Code Online (Sandbox Code Playgroud)

fab*_*ian 5

的第三个参数std::sort需要满足Compare命名要求,但是您的 lambda 显然违反了反自反关系的要求,即对于任何a,comp(a, a) 必须产生false,将字符串"0"作为两个参数传递会导致两者a并在循环b之前"00"并且循环完成而不返回结果而true不是所需的false.