我有这个代码:
#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将数据存储在堆部分。