【问题标题】:Cant figure out why program is crashing in C无法弄清楚为什么程序在 C 中崩溃
【发布时间】:2012-02-19 06:03:14
【问题描述】:

我有这个代码:

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

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

【问题讨论】:

  • StackOverflow 上的堆栈溢出。 :)
  • 每个数组有 160k 个元素,因此总大小为 8 * 160kB = 1.28 MB。这对堆栈来说相当大 - 显然太大了!

标签: c arrays visual-studio 2d crash


【解决方案1】:

这里 grid heightpowerauto variable 并将存储在 stack
在任何操作系统中,每个进程都有一些固定的默认大小堆栈。

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

你有两个选择

1> 增加此进程的堆栈大小

在带有 gcc 的 Linux 上,您可以将其增加

–stack 16777216 

在 gcc 命令中添加这个

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

【讨论】:

    【解决方案2】:

    您分配的堆栈过多。而是将一个或多个移动到堆中。

    【讨论】:

      【解决方案3】:

      刚读到这个网站的名字,堆栈溢出。 你可以: 1,将这三个数组移出主函数(如果初始化这些数组,编译后可能会得到一个大的.exe)。 要么 2、使用malloc()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        相关资源
        最近更新 更多