导致应用程序崩溃的C ++函数

时间:2015-04-10 21:27:07

标签: c++ arrays pointers matrix

我目前很困惑为什么这个C ++函数会不断崩溃我当前的程序。

您可能会看到我来自Java背景,现在我非常热衷于学习像C ++这样的语言。

此函数应该填充Node类型的2d数组,并在每个位置使用新节点。我想使用2D数组而不是矢量,因为这是我试图写的数独求解器。

当我构建并运行应用程序时,只是崩溃并说:

“SudokuSolver.exe已停止工作” 问题签名:   问题事件名称:BEX   应用程序名称:SudokuSolver.exe   应用版本:0.0.0.0   申请时间戳:55283d72   故障模块名称:MSVCR110.dll   故障模块版本:11.0.51106.1   故障模块时间戳:5098858e   例外抵消:000a326c   例外代码:c0000409   例外数据:00000007   操作系统版本:6.3.9600.2.0.0.768.101   区域设置ID:1033   附加信息1:332b   附加信息2:332b994896f66a7b5d5fb96032f7fbd2   附加信息3:2fa1   附加信息4:2fa12dec635ddb7f7a8e7c8690abd06a

我正在使用Eclipse在C ++中编码。

以下是有问题的功能。

void fillArray(Node grid[][matrixSizeY], string filePath) {

    int index = 0;

    ifstream inFile;

    inFile.open(filePath);

    // Check for Errors
    if (inFile.fail()) {
        cerr << "Error Opening File" << endl;
        exit(1);
    }

    while (!inFile.eof()) {

        string line;

        getline(inFile, line);

        // Get a Vector of each character in the String
        vector<string> data;
        Utilities::splitEachCharacter(line, data);

        printVect(data);

        for (int i = 0; i < matrixSizeY; i++) {

            string temp = data[i];

            int value = stoi(temp, nullptr, 0);

            Node node(index, i, value);

            grid[index][i] = node;
        }

        data.clear();
        line = "";
        index++;
    }
}

我觉得我应该使用我为Matrix中的每个位置调用的函数来创建一个指向新对象的数组,这可能是这样的:

Node* getNode(int x, int y, int data) {

    Node *node = new Node(x, y, data);

    return node;

}

但我真的很困惑如何制作像这样的指针数组。一些帮助和澄清/解释将不胜感激。

提前致谢

更新:

功能正在运行,我做了以下更改:

// Function Definition
void fillArray(Node (&grid)[matrixSizeX][matrixSizeY], string filePath);

1 个答案:

答案 0 :(得分:0)

异常代码对应堆栈缓冲区溢出。这可能表示某些嵌套调用没有结束或局部变量大小过多,可以用编译参数解决。确实,行

Node node(index, i, value);
grid[index][i] = node;

至少意味着使用节点结构的复制构造函数。请注意,您按值传递Node grid [] [matrixSizeY],而不是引用(返回时您的工作将丢失),如果数组很大,副本将为缓冲区充电。接下来,你没有指定第一个数组维度(这是合法的?我非常不确定,因为我认为只有最后一个维度可能是可选的)。