Не могу понять, почему программа падает в C - PullRequest
1 голос
/ 19 февраля 2012

У меня есть этот код:

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

Кажется, работает нормально, и программа не падает.В чем может быть проблема?

Ответы [ 3 ]

3 голосов
/ 19 февраля 2012

Здесь grid height и power равны auto variable и будут храниться в stack.
В любой ОС каждый процесс имеет некоторый фиксированный размер стека по умолчанию.

Здесь вы размещаете слишком много данных в стеке, поэтому у процесса нет другой памяти в стеке для другой операции. так что сбой

у вас есть два варианта

1> Увеличить размер стека для этого процесса

В Linux с gcc вы можете увеличить его на

–stack 16777216 

добавив это в команду gcc

2> вы можете сохранить эти данные в секции кучи с помощью malloc.

2 голосов
/ 19 февраля 2012

Вы выделяете слишком много стека.Вместо этого переместите одну или несколько в кучу.

0 голосов
/ 19 февраля 2012

Просто прочитайте название этого сайта, переполнение стека.Вы можете: 1, удалить эти три массива из основной функции (возможно, вы получите большой .exe после компиляции, если вы инициализируете эти массивы).или 2, используйте malloc ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...