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