Корректная очистка памяти через 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.