Утечки памяти при создании / удалении двумерного массива в 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;
}
Пробовал делать классическое создание и удаление динамического массива. График памяти был примерно таким же.
