#include <string>
#include <cstdlib>
#include <iostream>
using namespace std;
// function prototypes
string boxOfStars(int w, int h);
string lineOfStars(int len);
// function definitions
string lineOfStars(int len) {
string result = "";
for (int j=0; j<len; j++) {
result += "*";
}
return result;
}
string boxOfStars(int w, int h) {
string result_1 = lineOfStars(w);
for (int i=0; i<h; i++)
cout << result_1 << endl;
return 0;
}
int main() {
int width, length;
cout << ""Enter a width and length: ";
cin >> width >> length;
cout << boxOfStars(width, length);
return 0;
}
该计划的目的是在lineOfStars()
函数中调用boxOfStars()
函数。
当我运行程序时,出现“Segmentation fault:11”错误。
Enter a width and length: 5 5 ***** ***** ***** ***** ***** Segmentation fault: 11
我试过在互联网上搜索这个,但似乎无法找到问题。
程序在终端中运行良好,但在每个输出结束时,我收到此错误消息。
有人可以向我解释我的代码中的错误吗?
答案 0 :(得分:4)
boxOfStars()
的返回类型为std::string
,但它返回0
,它被解释为空char*
指针。将空char*
指针传递给std::string
构造函数是未定义的行为。
您可能希望boxOfStars()
返回void
而不是cout << boxOfStars(...)
中的main()
。
答案 1 :(得分:0)
您正在尝试cout
BoxOfStars
的结果,即{0}。函数BoxOfStars
本身正在为明星执行cout
。好像你有一些双倍的代码。
答案 2 :(得分:0)
当你这样做时
string boxOfStars(int w, int h) {
/* ... */
return 0;
}
您尝试返回0
并说它返回string
。因此,编译器为您添加了string
的转换,与您编写的相同:
string boxOfStars(int w, int h) {
/* ... */
return (string)0;
}
特别是在这种情况下,0
被解释为空指针,它将调用从string
创建const char *
的构造函数。尝试访问空指针(读取字符串)会导致段错误。糟糕!