在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;
}
我做错了,参考参数使用不正确吗?
答案 0 :(得分:7)
声明函数getInput
返回string
但没有return
语句,这是未定义的行为。如果您更改声明如下:
void getInput(string &input, string prompt)
分段错误应该消失。打开警告可以帮助您找到此问题,使用gcc -W -Wall -pedantic
我会收到您原始代码的以下警告:
warning: no return statement in function returning non-void [-Wreturn-type]
答案 1 :(得分:3)
函数getInput
表示它返回string
,调用代码尝试复制该return
。但是getInput
函数中没有input
。因为复制一个实际上没有返回的返回值是未定义的行为&#34;任何&#34;可能会发生在这一点上 - 在这种情况下,似乎会出现段错误。
由于您使用void
作为参考,因此无需返回字符串。只需将函数原型更改为{{1}}即可。
如果在编译时启用警告,您将更容易看到此类错误。
答案 2 :(得分:2)
string getInput(string &input, string prompt)
{
cout << prompt;
getline(cin, input);
}
您声明该函数返回string
类型,但您在函数中没有return
语句。当流程到达该函数的末尾时,它将导致未定义的行为。
尝试:
void getInput(string &input, string prompt)
{
cout << prompt;
getline(cin, input);
}