C++ 为什么我从g++;?

C++ 为什么我从g++;?,c++,g++,iostream,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++){

下面是我的代码。它在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;
    }

}
#包括
#包括
使用名称空间std;
无效排序_字符串(字符串x){
对于(int i=0;x.size();i++){
对于(int j=i;x.size();j++){
字符温度=x[i];
如果(温度>x[j]){
x[j]=温度;
x[i]=x[j];
}
}
}
}
int main(){
字符串;
cin>>单词;
而(单词!=“”){

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

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

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

您的for的条件是错误的。 替换


for(int i=0;我用gcc而不是g++编译你的源代码!用
g++-Wall-g
编译,然后使用
gdb
调试器。我太傻了……我不敢相信我会问这种问题。但是,谢谢!
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++){