簡體   English   中英

std::string append 分段錯誤

[英]std::string append segmentation fault

在解決 leetcode 問題https://leetcode.com/problems/largest-number/時遇到如下錯誤。

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create

所以我在本地運行了一個類似的代碼,它給了我分段錯誤。 (順便說一句,當矢量大小較小時,它可以毫無問題地運行,例如 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;
  });
}

std::sort的第三個參數需要滿足Compare named 要求,但您的 lambda 顯然違反了反反關系的要求,即對於任何acomp(a, a)必須產生false ,傳遞字符串"0"因為這兩個參數導致ab在循環之前都是"00"並且循環完成而不返回導致true而不是所需的false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM