Выделение памяти под двумерный массив через функцию - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д