Ошибка сегментации при попытке создать массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <stdlib.h>
 
void init(int* arr, int n) {
    arr = malloc(n * sizeof(int));
    int i;
    for (i = 0; i < n; ++i)
        arr[i] = i;
}
 
int main() {
    int* arr = NULL;
    int n = 10;
    init(arr, n);
    int i;
    for (i = 0; i < n; ++i)
        printf("%d\n", arr[i]);
    return 0;
}
пытаюсь создать массив, но при выполнении происходит ошибка сегментации. Смысл ошибки мне понятен, но её причину обнаружить не могу.

Решение задачи: «Ошибка сегментации при попытке создать массив»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void init(int **arr, int n) {
    *arr = (int*)malloc(n * sizeof(int));
    int i;
    for (i = 0; i < n; ++i)
    {
        *(*arr + i) = i;
    }
}
 
int main() {
    int *arr = NULL;
    int n = 10;
    init(&arr, n);
 
    int i;
    for (i = 0; i < n; ++i)
        printf("%d\n", arr[i]);
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с памятью и вводом/выводом данных.
  2. Создание функции init, которая принимает указатель на указатель целых чисел и их количество. Внутри функции происходит выделение памяти под массив с помощью malloc и присвоение указателя на первый элемент массива переменной arr. Затем происходит инициализация каждого элемента массива значением равным его индексу.
  3. Создание функции main, которая инициализирует указатель arr как NULL, задаёт размер массива равным 10 и вызывает функцию init передавая ей указатель на arr и его размер.
  4. В цикле до 10 раза выводится значение каждого элемента массива с помощью printf.
  5. В конце программы возвращается 0, что означает успешное завершение работы программы.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы