Объявление длинного массива с неподписанным размером 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);