Ошибка сегментации при попытке создать массив - 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; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с памятью и вводом/выводом данных.
- Создание функции
init
, которая принимает указатель на указатель целых чисел и их количество. Внутри функции происходит выделение памяти под массив с помощьюmalloc
и присвоение указателя на первый элемент массива переменнойarr
. Затем происходит инициализация каждого элемента массива значением равным его индексу. - Создание функции
main
, которая инициализирует указательarr
какNULL
, задаёт размер массива равным 10 и вызывает функциюinit
передавая ей указатель наarr
и его размер. - В цикле до 10 раза выводится значение каждого элемента массива с помощью
printf
. - В конце программы возвращается 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д