Выделение памяти под двумерный массив через функцию - C (СИ)
Формулировка задачи:
Вообщем пытался найти на форуме, но почему то так и не получилось (видимо плохл искал ). Как выделить память под двумерный массив через функцию. Вот как делал я :
Ругаеться что A используеться без инициализации, и еще просьба проверить правильно ли я освободил память.
#include <stdio.h> #include <stdlib.h> void CreateArray(float **X, int strings, int length) { X = (float **)malloc(strings * sizeof(float *)); for (int i = 0; i < strings; i++) X[i] = (float *)malloc(length * sizeof(float)); } void FreeArray(float **X, int strings) { for (int i = 0; i < strings; i++) free(X[i]); free(X); } int main(void) { float **A; CreateArray(A, 15, 6); FreeArray(A,15); system("pause"); return 0; }
Решение задачи: «Выделение памяти под двумерный массив через функцию»
textual
Листинг программы
#include <stdlib.h> float** createArray(int strings, int length) { float** arr = malloc(strings * sizeof(float*)); float* data = malloc(strings * length * sizeof(float)); for (int i=0; i < strings; ++i) { arr[i] = data + i*length; } return arr; } void freeArray(float** arr) { free(arr[0]); free(arr); } int main() { float** arr = createArray(15, 6); freeArray(arr); return 0; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки.
- Создание функции
createArray
, которая выделяет память под двумерный массив. - Вызов функции
malloc
для выделения памяти под указатель на первый элемент массива. - Вызов функции
malloc
для выделения памяти под данные массива. - Инициализация массива с помощью цикла
for
. - Возвращение двумерного массива.
- Создание функции
freeArray
, которая освобождает память. - Освобождение памяти, выделенной под массив.
- Вызов функции
freeArray
в функцииmain
. - Выход из функции
main
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д