Безопасно ли использовать массивы с переменной длиной?

StackOverflow https://stackoverflow.com/questions/7326547

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня беспокойство по поводу массивов с переменной длиной. Когда я хочу динамически распределить массив, я получу NULL, если невозможно выделить достаточно памяти, и я могу правильно ответить на это в своей программе. С массивом переменной длины я не получаю эту информацию. Что мне делать с этим?

Это было полезно?

Решение

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

Это не означает, что типы VLA бесполезны. В то время как VLA плохо/опасен, Указатель к-вала Типы чрезвычайно полезны. Они позволяют динамически раскрывать (через malloc) многомерные массивы, не выполняя арифметику измерения вручную, как в:

size_t n;
double (*matrix)[n] = malloc(n * sizeof *matrix);

Чтобы получить адресную матрицу N-By-N как matrix[i][j].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top