C++;导致应用程序崩溃的函数 我现在对为什么这个C++函数不断破坏我的当前程序感到困惑。 你可能会看到我来自java背景,现在我非常热衷于学习C++语言。
此函数用于在每个位置用新节点填充节点类型的二维数组。我想使用2D数组,而不是向量,因为这是我试图编写的数独解算器 当我构建和运行应用程序时,它只是崩溃并说: “SudokuSolver.exe已停止工作” 问题签名: 问题事件名称:BEX 应用程序名称:SudokuSolver.exe 应用程序版本:0.0.0.0 应用程序时间戳:55283d72 故障模块名称:MSVCR110.dll 故障模块版本:11.0.51106.1 故障模块时间戳:5098858e 异常偏移量:000a326c 异常代码:c0000409 异常数据:0000000 7 操作系统版本:6.3.9600.2.0.0.768.101 区域设置ID:1033 补充资料1:332b 附加信息2:332b994896f66a7b5d5fb96032f7fbd2 附加信息3:2fa1 附加信息4:2fa12dec635ddb7f7a8e7c8690abd06aC++;导致应用程序崩溃的函数 我现在对为什么这个C++函数不断破坏我的当前程序感到困惑。 你可能会看到我来自java背景,现在我非常热衷于学习C++语言。,c++,arrays,pointers,matrix,C++,Arrays,Pointers,Matrix,此函数用于在每个位置用新节点填充节点类型的二维数组。我想使用2D数组,而不是向量,因为这是我试图编写的数独解算器 当我构建和运行应用程序时,它只是崩溃并说: “SudokuSolver.exe已停止工作” 问题签名: 问题事件名称:BEX 应用程序名称:SudokuSolver.exe 应用程序版本:0.0.0.0 应用程序时间戳:55283d72 故障模块名称:MSVCR110.dll 故障模块版本:11.0.51106.1 故障模块时间戳:5098858e 异常偏移量:000a326c 异常
我在C++中使用Eclipse进行代码。 下面是讨论中的函数
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++;
}
}
但我真的很困惑,如何制作这样的指针数组。如能提供一些帮助和澄清/解释,将不胜感激
提前谢谢
更新:
该函数现在正在工作,我做了以下更改:
// Function Definition
void fillArray(Node (&grid)[matrixSizeX][matrixSizeY], string filePath);
异常代码对应于堆栈缓冲区溢出。这可能表示某些嵌套调用没有结束,或者局部变量大小过大,可以用编译参数解决。事实上,台词
Node node(index, i, value);
grid[index][i] = node;
至少暗示使用节点结构的复制构造函数。请注意,您通过值传递节点网格[][matrixSizeY],而不是引用(返回时您的工作将丢失),并且如果数组较大,副本将对缓冲区收费。接下来,您不需要指定第一个数组维度(这是合法的?我很不确定,因为我认为只有最后一个维度是可选的) “希望使用2D数组而不是向量,因为这是针对我正在尝试编写的数独解算器。”
while(!infle.eof())
是错误的,它应该是while(getline(infle,line))
。不要使用原始指针和新指针。如果节点很小,只需按值返回节点。谢谢大家的宝贵意见!每一个帮助我找出错误是什么,谢谢你的帮助,我意识到我做了很多事情不正确,学习C++后,java被证明是相当棘手的。我觉得我应该从前者开始。如果您感兴趣,请查看我的编辑以查看我的更改。
Node node(index, i, value);
grid[index][i] = node;