Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Ошибка сегментации в C

Найдите недопустимое обращение к памяти и исправьте причину сбоя.

Открыть в компиляторе

Ошибка сегментации в C
Найдите недопустимое обращение к памяти и исправьте причину сбоя.

Ошибка сегментации часто означает обращение к недоступной памяти. Причинами бывают нулевые или неинициализированные указатели, выход за границы и использование освобождённых объектов. Неопределённое поведение не всегда сразу приводит к аварии.

Уменьшите программу до воспроизводимого примера. Для каждого указателя проверьте объект, его время жизни и используемые индексы. Проверяйте malloc до записи и не возвращайте адрес автоматической локальной переменной.

Если среда поддерживает, включите отладочную информацию и AddressSanitizer. Отладчик помогает посмотреть стек и значения переменных. Исправляйте неверный доступ, а не только строку, на которой проявился симптом.

Код C

#include <stdio.h>

int main(void)
{
    int values[] = {10, 20, 30};
    size_t count = sizeof values / sizeof values[0];

    for (size_t i = 0; i < count; ++i) {
        printf("values[%zu] = %d\n", i, values[i]);
    }

    return 0;
}
Открыть в компиляторе

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.