我的C ++代码涉及调用另一个函数的函数有什么问题?

时间:2017-10-26 01:06:01

标签: c++ function loops fault

#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

我试过在互联网上搜索这个,但似乎无法找到问题。

程序在终端中运行良好,但在每个输出结束时,我收到此错误消息。

有人可以向我解释我的代码中的错误吗?

3 个答案:

答案 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 *的构造函数。尝试访问空指针(读取字符串)会导致段错误。糟糕!