0

Code::Blocks で GCC コンパイラを使用すると、エラーが発生します。

Segmentation fault (core dumped)

Process returned 139 (0x8B)
...

入力を入力した後、求められます。ここに私のテストプログラムがあります:

#include <iostream>
#include <string>

using namespace std;

string getInput(string &input, string prompt)
{
    cout << prompt;
    getline(cin, input);
}

int main()
{
    string input;
    getInput(input, "What's your name?\n>");
    cout << "Hello " << input << "!" << endl;
    return 0;
}

参照パラメータが間違って使用されていますか?

4

3 に答える 3

7

関数getInputは を返すと宣言されていますが、未定義の動作であるステートメントがstringありません。return宣言を次のように変更すると、次のようになります。

void getInput(string &input, string prompt)

セグメンテーション違反はなくなるはずです。警告をオンにするgcc -W -Wall -pedanticと、元のコードで I receive the following warning を使用して、この問題を見つけるのに役立ちました。

warning: no return statement in function returning non-void [-Wreturn-type]
于 2013-05-30T16:02:03.587 に答える
3

関数は、呼び出し元のコードがコピーしようとする をgetInput返すと述べています。stringしかしreturn、あなたのgetInput機能にはありません。実際には返されなかった戻り値をコピーすることは未定義の動作であるため、この時点で「何か」が発生する可能性があります。この場合、segfault が結果として表示されます。

参照として使用inputしているため、文字列を返す必要はありません。関数プロトタイプを に変更するだけvoidです。

コンパイル時に警告を有効にすると、この種のエラーがより簡単に表示されます。

于 2013-05-30T16:04:25.727 に答える