﻿# V2598\. MISRA\. Variable length array types are not allowed\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Это правило актуально только для C\. Объявление массивов, имеющих неконстантный размер \(variable\-length array, VLA\), может привести к переполнению стека и потенциальным уязвимостям в программе\.

Рассмотрим следующий пример:

```cpp
void foo(size_t n)
{
  int arr[n];
  // ....
}
```

Передача большого числа 'n' может привести к переполнению стека, так как массив станет слишком большим и займет больше памяти, чем есть на самом деле\.

Логичным решением выглядит ограничение размера массива:

```cpp
#define MAX_SIZE 128
void foo(size_t n)
{
  size_t size = n > MAX_SIZE ? MAX_SIZE : n;
  int arr[size];
  if (size < n) // error
  // ....
}
```

Однако в таком случае лучше использовать константу для упрощения логики программы:

```cpp
#define SIZE 128
void foo()
{
  int arr[SIZE];
  // ....
}
```

Также это позволит избежать проблем, связанных с VLA, например, вычислением 'sizeof' на таких массивах и их передачей в другие функции\.