gpt4 book ai didi

c++ - 程序耗尽了我所有的内存

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:54 25 4
gpt4 key购买 nike

我正在从事纹理合成项目。我快完成了,但是我的进程在运行时占用了 ~2gb 的内存。我以为我正在释放所有调用的数组,但我可能错了。 C++ 不是我的专长。

我知道在 C++ 中使用三重指针是错误的方式,但我现在对它们更满意。如果您需要查看更多代码,请告诉我。谢谢。

元图片声明

class MetaPic
{
public:
Pic* source;
Pixel1*** meta;
int x;
int y;
int z;
MetaPic();
MetaPic(Pic*);
MetaPic(const MetaPic&);
MetaPic(int, int, int);
MetaPic& operator=(const MetaPic&);
~MetaPic();
void allocateMetaPic();
void copyPixelData();
void copyToOutput(Pic*&);
void copyToMetaOutput(MetaPic&, int, int);
void copyToSample(MetaPic&, int, int);
void freeMetaPic();

};

分配三重指针

    void MetaPic::allocateMetaPic()
{
meta = (Pixel1***)calloc(x, sizeof(Pixel1**));

for(int i = 0; i < x; i++)
{
meta[i] = (Pixel1**)calloc(y, sizeof(Pixel1*));
for(int j = 0; j < y; j++)
{
meta[i][j] = (Pixel1*)calloc(z, sizeof(Pixel1));
}
}
}

释放三重指针

void MetaPic::freeMetaPic()
{
for(int j = 0; j < y; j++)
{
for(int i = 0; i < z; i++)
free(meta[i][j]);
}
for(int i = 0; i < x; i++)
free(meta[i]);

free(meta);
}

析构函数

MetaPic::~MetaPic()
{
freeMetaPic();
}

=运算符

MetaPic& MetaPic::operator=(const MetaPic& mp)
{
freeMetaPic();

source = mp.source;
x = mp.x;
y = mp.y;
z = mp.z;
allocateMetaPic();
copyPixelData();

return *this;
}

拷贝构造函数

MetaPic::MetaPic(const MetaPic& mp)
{
source = mp.source;
x = mp.x;
y = mp.y;
z = mp.z;
allocateMetaPic();
copyPixelData();
}

最佳答案

释放时,您似乎在循环中使用了错误的终止值。只需让 freeMetaPic 函数撤消分配函数所做的操作,即:

void MetaPic::freeMetaPic()
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
free(meta[i][j]);
}

free(meta[i])
}

free(meta);
}

关于c++ - 程序耗尽了我所有的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com