Корректное освобождение памяти - C (СИ)

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

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

Создаю двумерный массив таким способом: выделяю линейный массив, затем "делю" его на части.
#include <stdio.h>
#include <malloc.h>
int main(){
int ** pM;
int * pTmp;
int x=6,y=8;
pTmp=(int*)malloc(x*y*sizeof(int));
pM=(int**)malloc(x*sizeof(pM));
for(int i=0;i<x;i++)
*(pM+i)=(pTmp+y*i);
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
pM[i][j]=i*y+j;
pM[1][2]=45;
for(int i=0;i<x;i++){
for(int j=0;j<y;j++)
printf("%2d ",pM[i][j]);
printf("\n");
}
free(pM);
free(pTmp);
return 0;
}
Вопрос, если вместо free(pTmp) освободить память через free(pM[0]) корректно ли она освободится, ведь pM[0] указывает на ту же ячейку, что и pTmp? или я что-то путаю?

Решение задачи: «Корректное освобождение памяти»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
/*...*/
int rows, columns, **matrix, i, j;
 
/* получить или задать значения rows и columns */
 
if ( ( matrix = malloc(sizeof(int*) * rows) ) == NULL ) {
    perror("malloc");
    exit(1);
}
for ( i = 0; i < rows; ++i ) {
    if ( ( matrix[i] = malloc(sizeof(int) * columns) ) == NULL ) {
        perror("malloc");
        exit(1);
    }
}
 
for ( i = 0; i < rows; ++i ) {
    for ( j = 0; j < columns; ++j ) {
        /* работа с элементами матрицы */
    }
}
 
for ( i = 0; i < rows; ++i )
    free(matrix[i]);
free(matrix);
/*...*/

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

  1. Название переменной: rows, columns, matrix, i, j
  2. Тип данных: int, int*, int**, int, int
  3. Значение: rows, columns, matrix, i, j - переменные, которые используются в коде
  4. Описание:
    • Код предназначен для работы с двумерным массивом (матрицей)
    • Переменная rows содержит количество строк в матрице
    • Переменная columns содержит количество столбцов в матрице
    • Переменная matrix является указателем на первый элемент матрицы
    • Переменные i и j используются в цикле для обращения к элементам матрицы
  5. Управление памятью:
    • С помощью функции malloc выделяется память под массив указателей на int (для хранения строк матрицы)
    • Для каждой строки матрицы с помощью функции malloc выделяется память под массив int (для хранения столбцов матрицы)
    • После использования матрицы, память освобождается с помощью функции free
  6. Цель: корректное освобождение памяти

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


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

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

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