我有这个代码:
#include <stdio.h>
#include <math.h>
#define gridSize 400
void main() {
float grid[gridSize][gridSize];
short height[gridSize][gridSize];
short power[gridSize][gridSize];
}
我正在使用 visual studio 2010,当我运行该程序时,它似乎立即崩溃了。但是这段代码:
#include <stdio.h>
#include <math.h>
#define gridSize 400
void main() {
float grid[gridSize][gridSize];
short height[gridSize][gridSize];
//short power[gridSize][gridSize];
}
似乎工作正常,程序没有崩溃。可能是什么问题?
最佳答案
这里的grid
height
和power
是auto variable
并且要存入stack
.
在任何操作系统中,每个进程都有一些固定的默认大小堆栈。
此处您在堆栈上分配了太多数据,因此进程在堆栈上没有其他内存可用于其他操作。所以它崩溃了
你有两个选择
1> 增加此进程的堆栈大小
在带有 gcc 的 Linux 上你可以增加它
–stack 16777216
在 gcc 命令中添加这个
2>您可以使用 malloc 将此数据存储在堆部分。
关于无法弄清楚为什么程序在 C 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347153/