Утечки памяти при создании / удалении двумерного массива в C++

Сейчас пишу функции для создания библиотеки для работы с матрицами (первый курс универа). После тестов программы стал замечать, что после вызова функции освобождения памяти программа не полностью очищает кучу, оставляя какой-то мусор. Для тестов я решил запустить цикл, в котором я создавал и удалял массив с случайной размерностью. В итоге я получил растущий график: память занималась, освобождалась, но не полностью.

введите сюда описание изображения

Вроде как работа с памятью для динамического массива описана правильно. У меня ещё есть сомнения в плане использования структуры Matrix, которую я использую для хранения указателя на матрицу и её размерности. Возможно что-то не так с ней?

struct Matrix
{
    double** pntMatrix = 0;
    int rowCount = 0;
    int columnCount = 0;
};

Вот код, работу которого я проверял:

#include <iostream>
#include <string>
#include "windows.h"
using namespace std;

struct Matrix
{
    double** pntMatrix = 0;
    int rowCount = 0;
    int columnCount = 0;
};

Matrix deleteMatrixArray(Matrix matrix);
Matrix createMatrixArray(const int, const int);

Matrix createMatrixArray(const int matrixRowCount, const int matrixColumnCount)
{
    Matrix matrixInfo;
    double **matrix = new double*[matrixRowCount];

    for (int i = 0; i < matrixRowCount; i++)
    {
        matrix[i] = new double[matrixColumnCount] {0};
    }

    matrixInfo.pntMatrix = matrix;
    matrixInfo.rowCount = matrixRowCount;
    matrixInfo.columnCount = matrixColumnCount;
    return matrixInfo;
}

Matrix deleteMatrixArray(Matrix matrix)
{
    if (matrix.rowCount == 0 && matrix.columnCount == 0 && matrix.pntMatrix == 0)
    {
        return { 0,0,0 };
    }
    for (int i = 0; i < matrix.rowCount; i++)
    {
        delete[] matrix.pntMatrix[i];
    }

    delete[] matrix.pntMatrix;
    return { 0,0,0 };
}


int main()
{
    setlocale(LC_ALL, "Russian");
    Matrix matrix1, matrix2;

    for (int i = 0; i < 20; i++) {
        matrix1 = createMatrixArray(rand()%1000, rand() % 1000);
        Sleep(1500);
        matrix1 = deleteMatrixArray(matrix1);
        Sleep(1500);
    }
    system("pause");
    return 0;
}

Пробовал делать классическое создание и удаление динамического массива. График памяти был примерно таким же.


Ответы (0 шт):