Ошибка сегментации при попытке создать массив - 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, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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