【问题标题】:Segmentation Fault in C++ while using string vectors使用字符串向量时 C++ 中的分段错误
【发布时间】:2021-03-23 01:25:20
【问题描述】:

我的代码是用于在线编码练习网站的,我已经完成了许多挑战,但我似乎无法解决这个问题的 segmentation fault 错误。

代码的目的是在字符串向量中找到最长的字符串(最多 10 个字符串),然后按顺序返回仅包含这些最长字符串的字符串向量。

我相信我的代码在逻辑上有效,但我无法对其进行测试。我对向量还是新手,所以似乎无法正确理解这里与我的问题相关的其他答案。

vector<string> allLongestStrings(vector<string> inputArray) {

    vector<string> longestStrings;            // vector
    int longest_size = longestStrings.size(); // int
    int longestArrayCounter = 0;              // int. For filling longestStrings whenever 
                                              //  there is a long string
    int longest_string = 0;                   // int. For recording the size of the longest string

    for (int i = 0; i < inputArray.size(); i++) {  
        // Loop will:  
        //1. Measure size of string in input array 
        //2. if longest will change value of longest_string and clear longestStrings
        //3. If the same length as longest_string will add it to longestStrings vector
        //4. if it is shorter it will be ignored
       if (inputArray[i].size() > longest_string) { // input vector
          longest_string = inputArray[i].size();     // vector

       longestStrings.clear(); //clearing the vector to only store longest string values
       longestArrayCounter = 0; //reset counter for longestStrings
       longestStrings[longestArrayCounter++] = inputArray[i];//puts new longest string from input into my vector
       }

       if (inputArray[i].size() == longest_string) { 
       longestStrings[longestArrayCounter++] =inputArray[i];// my vector and input vector
       }
   }
   return longestStrings;
}

【问题讨论】:

  • longestStrings 是一个带有0 元素的向量。
  • 你真的在做too much work

标签: c++ vector segmentation-fault


【解决方案1】:
       longestStrings.clear();
       longestArrayCounter = 0;
       longestStrings[longestArrayCounter++] = inputArray[i];

很糟糕,因为您正在对不存在的元素进行分配。

而不是两个

longestStrings[longestArrayCounter++] = inputArray[i];

你应该这样做

longestStrings.push_back(inputArray[i]);

然后,std::vector 将为您管理大小,因此您不必自己管理longestArrayCounter。使用longestStrings.size()获取大小。

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多