为什么我从g ++收到此错误消息?

时间:2012-10-14 22:11:56

标签: c++ g++ iostream

以下是我的代码。它在g ++中编译很好,但总是存在这个运行时错误:分段错误(核心转储)

我哪里错了?

#include<iostream>
#include<string>

using namespace std;

void sort_string(string x){
    for (int i=0;x.size();i++){
                    for(int j=i;x.size();j++){
                            char temp = x[i];
                            if (temp > x[j]){
                                    x[j]=temp;
                                    x[i]=x[j];
                            }
                    }
    }
}


int main(){
    string words;
    cin >> words;

    while (words != " "){
            cout << words << " ";
            sort_string(words);
            cout << words << endl;
    }

}

3 个答案:

答案 0 :(得分:3)

您正在循环超出字符串的边界。你需要这个:

for (int i=0; i<x.size(); i++){ ... }

类似于内循环。除非字符串为空,否则x.size()将评估为true。由于这是循环终止条件,因此对于非空字符串,循环将永远运行。

答案 1 :(得分:0)

你的病情毫无意义。 for循环中的x.size()部分应该是终止循环的条件。这将始终返回一些非零值,除非您的字符串为0,这意味着您的代码无限执行。然后,j总是递增,你越界。您需要提供有效条件,例如i < x.size()j < x.size()

答案 2 :(得分:0)

你的条件是错误的。 取代

for (int i=0;x.size();i++){
    for(int j=i;x.size();j++){

for (int i=0; i<x.size();i++){
    for(int j=i; j<x.size();j++){

另外,你会循环不尽