Корректная очистка памяти через Free - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Столкнулся со след. ситуацией. есть код:
#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;
}
И он падает при очистке памяти на free(array). Если же сделать
 static int *array;
или перенести
int *array;
выше main (), сделав тем самым глобальным, то код работает и память корректно чистится. Не могу понять как сделать так чтобы массив был объявлен в main без static спецификатора, память для него выделялась в сторонней функции FillArray, а чистилась бы в main... Буду признателен за ответы.

Решение задачи: «Корректная очистка памяти через 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;
    }
}

Объяснение кода листинга программы

  1. В функции FillArray присутствуют два указателя arr1 и arr2, которые предназначены для работы с массивами.
  2. Внутри функции происходит выделение памяти под массивы arr1 и arr2 с помощью функции malloc.
  3. Размер массива определяется переменной SIZE.
  4. Затем происходит заполнение массивов элементами.
  5. В цикле for происходит заполнение элементов массива arr1 и arr2 значениями i.
  6. После завершения цикла, массивы arr1 и arr2 содержат последовательность чисел от 0 до SIZE-1.
  7. Выход из функции не предусматривает освобождение памяти, выделенной под массивы arr1 и arr2.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.125 из 5
Похожие ответы