当我在main中声明了我的2d数组时,为什么我的程序会退出
Why do does my program exit when I have my 2d array declared in main?
我试图从文本文件中读取并将所有单词存储在2d数组中,但由于某种原因,我的代码只有在2d数组被声明为全局变量时才能工作(这是本项目不允许的(。当我把我的2d数组放在main中时(如代码示例所示(,我得到一个退出代码";处理结束,退出代码为-103741571(0xC00000FD(";。你知道为什么会发生这种事吗?
char theWord[maxLength]; // declare input space to be clearly larger than largest word
char dict_array[maxWords][maxLength];
while (inStream >> theWord) {
for (int i = 0; i < strlen(theWord); i++) {
dict_array[count][i] = tolower(theWord[i]);
}
if (strlen(theWord) >= 3) {
count++;
}
你问这个问题的地方对了,因为0xC00000FD
的意思是堆栈溢出!
您的代码失败,因为char dict_array[maxWords][maxLength]
大于进程中的可用堆栈空间。您可以通过使用std::vector
、operator new[]
或malloc()
分配阵列来轻松解决此问题,也可以通过增加堆栈的大小来艰难地解决此问题(如何做到这一点取决于您的操作系统,就像我说的那样,这是一种困难的方法,不用麻烦(。
这个问题最常用的解决方案是std::vector<std::string>
。然后,您可以分配尽可能多的内存,并通过自动释放(所谓的RAII(以安全的方式进行分配。
当它是全局变量时,它工作得很好,因为全局变量没有在堆栈上分配。
该错误表示堆栈溢出。您的数组太大,无法驻留在函数中。要么使它们全局化,要么最好使用new[]
动态分配它们
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 为什么我的for循环不能正确获取argv
- 为什么二进制搜索在我的测试中不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么我的 std::ref 无法按预期工作?
- 为什么我的删除节点函数实际上没有删除节点?
- 为什么我的 IExtractIcon 处理程序没有被调用?
- 为什么我的多线程作业队列崩溃
- 为什么我的排序算法会更改数组值
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 为什么我的程序在for循环中k=0时返回垃圾值
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 为什么我的共享库中存在展开符号
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 为什么我的递归函数按降序打印,然后按升序打印?