﻿# V518\. The 'malloc' function allocates suspicious amount of memory calculated by 'strlen\(expr\)'\. Perhaps the correct expression is strlen\(expr\) \+ 1\.

Анализатор обнаружил потенциально возможную ошибку, связанную с выделением недостаточного количества памяти\. В коде подсчитывается длина строки и выделяется буфер памяти данного размера, но не учитывается наличие терминального '\\0'\.

Рассмотрим пример:

```cpp
char *p = (char *)malloc(strlen(src));
strcpy(p, src);
```

В данном случае просто забыто про \+1\. Правильный код:

```cpp
char *p = (char *)malloc(strlen(src) + 1);
strcpy(p, src);
```

Приведем другой пример некорректного кода, обнаруженный анализатором в одном из приложений:

```cpp
if((t=(char *)realloc(next->name, strlen(name+1))))
{
  next->name=t;
  strcpy(next->name,name);
}
```

Здесь по невнимательности неправильно поставлена правая скобочка '\)'\. В результате мы выделим на 2 байта меньше памяти, чем необходимо\. Исправленный вариант:

```cpp
if((t=(char *)realloc(next->name, strlen(name)+1)))
```