Объявление длинного массива с неподписанным размером int

Я делал проблему, когда я столкнулся с ошибкой сегментации при объявлении массива как:

long long ways[max+1];  

где,

unsigned int max = findMax(l,T); // l is an unsigned int array and T is an int.  

и findMax является функцией типа:

unsigned int findMax(unsigned int arr[],int size)  

Как я могу решить это?

1 ответ

Решение

Вероятная причина в том, что массив слишком велик для стека.

Типичный размер стека на данный момент составляет 1-16 Мб (может быть значительно меньше во встроенной системе). Если long long Значение 8 байтов означает, что выделение одного массива из более чем 125000 элементов может быть проблематичным. И вы также хотите оставить место для других авто переменных.

Действительно большие массивы не должны размещаться в стеке.

Вместо этого вы можете попробовать выделить его в куче:

long long *ways = calloc(max+1, sizeof *ways);
if (ways == NULL) {
    // allocation failed!!
}
// Do stuff.
free(ways);
Другие вопросы по тегам