2012-02-19 148 views
1

崩溃我有这样的代码:无法弄清楚,为什么程序是用C

#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]; 
} 

似乎工作正常,程序不会崩溃。可能是什么问题呢?

+4

StackOverflow上的堆栈溢出。 :) – Mysticial 2012-02-19 06:05:50

+0

每个阵列有160k个元素,因此总大小为8 * 160kB = 1.28 MB。这对于堆栈来说相当大 - 显然太大了! – 2012-02-19 06:11:25

回答

3

这里gridheightpowerauto variable并打算在stack存储。
在任何Os中,每个进程都有一些固定的默认大小堆栈。

在这里,您在堆栈上分配了太多的数据,因此进程没有其他内存留在堆栈上进行其他操作。所以它崩溃

你有两个选择

1>增加堆栈大小,这个过程

在Linux上使用gcc,你可以通过

–stack 16777216 

增加它在海湾合作委员会的命令添加此

2>您可以使用malloc将此数据存储在堆部分。

2

您正在分配太多堆栈。改为将一个或多个移入堆。

0

刚刚阅读本网站的名称,堆栈溢出。 您可以: 1,将这三个数组移出主函数(也许如果初始化这些数组,您将在编译后得到一个大的.exe文件)。 或 2,使用malloc()。

相关问题