﻿# V675\. Writing into read\-only memory\.

Анализатор обнаружил попытку записи в память, которая предназначена только для чтения\.

Рассмотрим пример\.

```cpp
char *s = "A_string";
if (x)
  s[0] = 'B';
```

Здесь указатель 's' ссылается на область памяти, предназначенной только для чтения\. Изменение этой памяти приведёт к неопределённому поведению программы\. Скорее всего, это неопределенное поведение программы будет представлять собой [access violation](https://pvs-studio.ru/ru/blog/terms/0063/)\.

Исправленный вариант программы:

```cpp
char s[] = "A_string";
if (x)
  s[0] = 'B';
```

На стеке создастся массив 's' и в него будет скопирована строка из read\-only памяти\. Теперь строку 's' можно изменять\.



P\.S\.

Если "A\_string" представляет собой "const char \*", то почему этот тип неявно приводится к "char \*"?

Такое поведение существует из\-за соображений совместимости\. Было написано ОЧЕНЬ много кода на Си, где используются не константные указатели\. Разработчики стандарта/компиляторов не нашли в себе силы в этом месте сломать обратную совместимость с имеющимся кодом\.