Ошибка сегментации при выделении больших массивов в стеке - PullRequest
5 голосов
/ 10 июля 2011

Когда я скомпилировал этот простой C-код, все нормально, но после раскомментирования строки это показывает ошибку сегментации.Я не знаю, что с этим не так.Пожалуйста, помогите.

#include<stdio.h>
int main()
    {
    int arr[10002][10002];
    int color[10002];
    int neigh;
 // scanf("%d",&neigh);
    return 0;
    }

Ответы [ 2 ]

12 голосов
/ 10 июля 2011

Вы дуете стек с arr и color.Предположительно, когда ваш вызов scanf закомментирован, компилятор оптимизирует все эти переменные, но когда он присутствует, он пытается выделить память в стеке.

Сделать переменные глобальными и считывать данные из стековой памяти противкуча памяти.

#include<stdio.h>

int arr[10002][10002];
int color[10002];

int main()
{
    int neigh;
    scanf("%d",&neigh);
    return 0;
}
5 голосов
/ 10 июля 2011

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

...