Учебная версия на русском. Код и его вывод сохранены в исходном виде.
Ошибка сегментации в 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;
}Открыть в компилятореЧастые вопросы
Почему код и вывод остаются на английском?
Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.