I carefully used smart pointer to avoid memory leaks and dangling pointers, but someone says my code has memory leaks. Is it true? If so, how can I fix it?
#include <iostream>
#include <initializer_list>
#include <memory>
using namespace std;
using Ptr2D = unique_ptr<unique_ptr<int[]>[]>;
using IniList = initializer_list<int>;
void printImage(const Ptr2D& image, const IniList& il)
{
for (auto& i : il)
{
for (auto& j : il)
{
cout << image[i][j] << ',';
}
cout << '\n';
}
}
template<size_t SIZE>
void rotateImage(Ptr2D& image, const IniList& il)
{
Ptr2D temp(new unique_ptr<int[]>[SIZE]);
for (auto& i : il)
{
unique_ptr<int[]> subTemp(new int[SIZE]);
for (auto& j : il)
{
subTemp[j] = 0;
}
temp[i] = move(subTemp);
}
for (auto& i : il)
{
for (auto& j : il)
{
temp[i][j] = image[SIZE - j - 1][i];
}
}
for (auto& i : il)
{
for (auto& j : il)
{
image[i][j] = move(temp[i][j]);
}
}
}
int main()
{
const size_t SIZE = 5;
Ptr2D image(new unique_ptr<int[]>[SIZE]);
IniList il = { 0, 1, 2, 3, 4 };
for (auto& i : il)
{
unique_ptr<int[]> temp(new int[SIZE]);
for (auto& j : il)
{
temp[j] = j + il.size() * i;
}
image[i] = move(temp);
}
cout << "******* original image ******\n";
printImage(image, il);
rotateImage<SIZE>(image, il);
cout << "******* rotated image ******\n";
printImage(image, il);
}
std::vector<std::vector<int>>
or juststd::vector<int>
\$\endgroup\$