Перейти к содержанию

Ошибки и вылеты при игре

Ошибки во время игры (ошибки рантайма) и варианты их решения.

Как читать трассировку ошибки

Здесь должна быть картинка.

В данном разделе представлены основные ошибки и вылеты.

Tried to read from address zero / Tried to write to address zero

Попытка чтения/записи по указателю NULL (по указателю, который не связан ни с каким объектом). Способ решения зависит от контекста, но в общем случае следует поставить проверку на NULL :

// Сохраняем в указатель `lt` значение, которое может оказаться и пустым:
Actor lt = GetLinetarget();

// Если 
if ( lt == NULL ) {
    return;
}

Division by zero

Деление на ноль запрещено.

Если это действительно необходимо, то проще всего это обойти через добавление условия проверки на ноль перед проблемным местом:

int x = 1000;
int y = SomeFunction(); // Предположим, здесь может возвращаться и "0".

int result;

if ( y != 0 ) {
    // Если делитель — не "0", делим как нужно.
    result = x / y;

} else {
    // Если всё-таки "0", сохраняем предзаготовленное значение.
    result = 0;
}

VM execution aborted: thrown exception

Или как-то так, уточнить. Было выкинуто пользовательское исключение.

Array out of bounds

Выход за пределы массива. Подробнее можно почитать в статье про массивы.