Корректная очистка памяти через Free - C (СИ)
Формулировка задачи:
Доброго времени суток!
Столкнулся со след. ситуацией.
есть код:
И он падает при очистке памяти на free(array).
Если же сделать
или перенести выше main (), сделав тем самым глобальным, то код работает и память корректно чистится.
Не могу понять как сделать так чтобы массив был объявлен в main без static спецификатора, память для него выделялась в сторонней функции FillArray, а чистилась бы в main...
Буду признателен за ответы.
#include <stdio.h> #include <stdlib.h> #define SIZE 100 int * FillArray(int *array) { int i; array = (int *) malloc(sizeof(int) * SIZE); for (i = 0; i < SIZE; ++i) array[i] = i; return array; } int main(int argc, char *argv[]) { int *array; int *p; p = FillArray(array); //... free(array); system("PAUSE"); return 0; }
static int *array;
int *array;
Решение задачи: «Корректная очистка памяти через Free»
textual
Листинг программы
void FillArray(int** arr1, int** arr2) { int i; *arr1 = (int*)malloc(sizeof(int)* SIZE); *arr2 = (int*)malloc(sizeof(int)* SIZE); for (i = 0; i < SIZE; ++i) { (*arr1)[i] = i; (*arr2)[i] = i; } }
Объяснение кода листинга программы
- В функции
FillArray
присутствуют два указателяarr1
иarr2
, которые предназначены для работы с массивами. - Внутри функции происходит выделение памяти под массивы
arr1
иarr2
с помощью функцииmalloc
. - Размер массива определяется переменной
SIZE
. - Затем происходит заполнение массивов элементами.
- В цикле
for
происходит заполнение элементов массиваarr1
иarr2
значениямиi
. - После завершения цикла, массивы
arr1
иarr2
содержат последовательность чисел от 0 доSIZE-1
. - Выход из функции не предусматривает освобождение памяти, выделенной под массивы
arr1
иarr2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д