﻿# 64\-битная ошибка

В наших статьях и в документации к [PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/) этот термин означает ошибку в Си/Си\+\+ коде, которая проявляет себя при компиляции программы в 64\-битном режиме\. Код, содержащий 64\-битную ошибку, будет корректно исполняться в 32\-битном режиме и приводить к зависанию / аварийному завершению / замедлению / непредсказуемому поведению при запуске программы собранной в 64\-битной конфигурации\.

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

```cpp
float *Array = (float *)malloc(100 * sizeof(float));
float *ptr = Array + 50;
unsigned index = -1;
ptr[index] = 3.14f;
```

Приведенный код приведет на [64\-битной](https://pvs-studio.ru/ru/blog/terms/0001/) системе к ошибке "Access Violation"\. Значение переменной index равно 0xFFFFFFFFu и доступ к элементу с таким индексом недопустим\. Тем не менее, такой код мог с десятилетие успешно работать в 32\-битной программе, где операция ptr\+0xFFFFFFFFu была эквивалентна операции ptr\-1\. Более подробно подобные ошибки описаны в статье "[Коллекция примеров 64\-битных ошибок в реальных программах](https://pvs-studio.ru/ru/blog/posts/cpp/a0065/)"\.

Те ошибки, которые мы называем "64\-битными" могут проявить себя и на системах с архитектурой отличной от Intel 64 / IA64\. Часто код содержащий "64\-битные ошибки" можно назвать некачественным и неверным, которой делает требуемые действия только благодаря удачному стечению обстоятельств и особенностям 32\-битной архитектуры\. Термин "64\-битная ошибка" вводится для того, чтобы выделить класс ошибок, с которыми начинает сталкиваться программист, разрабатывая код для 64\-битной системы или перенося старый 32\-битный код на 64\-битную платформу\. Класс 64\-битных ошибок можно описать и диагностировать на этапе кодирования, тем самым существенно сократив затраты на тестирование и поддержку 64\-битный версии программного продукта\. Наиболее полно диагностика данного класса ошибок реализована в [статическом анализаторе](https://pvs-studio.ru/ru/blog/terms/0046/) Viva64, входящего в состав [PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/)\.

## Библиографический список

1. Андрей Карпов\. [А существуют ли в реальности 64\-битные ошибки?](https://pvs-studio.ru/ru/blog/posts/0030/)
1. Андрей Карпов\. [Коллекция примеров 64\-битных ошибок в реальных программах](https://pvs-studio.ru/ru/blog/posts/cpp/a0065/)\.
1. Андрей Карпов, Евгений Рыжков\. [20 ловушек переноса Си\+\+ \- кода на 64\-битную платформу](https://pvs-studio.ru/ru/blog/posts/cpp/a0004/)\.
1. Евгений Рыжков\. [Проблемы 64\-битного кода на примерах](https://pvs-studio.ru/ru/blog/posts/cpp/a0008/)\.
1. Андрей Карпов\. [64 бита, /Wp64, Visual Studio 2008, Viva64 и все, все, все\.\.\.](https://pvs-studio.ru/ru/blog/posts/cpp/a0021/)
1. Андрей Карпов\. [64\-битный конь, который умеет считать](https://pvs-studio.ru/ru/blog/posts/cpp/a0043/)\.
1. Андрей Карпов\. [Оптимизация в мире 64\-битных ошибок](https://pvs-studio.ru/ru/blog/posts/cpp/0047/)\.
1. Андрей Карпов\. [Красивая 64\-битная ошибка на языке Си](https://pvs-studio.ru/ru/blog/posts/cpp/0033/)\.