我的班级中有一个指针数组。 我正在使用这些指针来分配一定数量的缓冲区。
在析构函数中,我想释放这段记忆,但似乎我做错了。
//In the Constructor
for(int i = 0; i< NUM_OF_BUFFERS; i++)
{
mBuffer[i] = new Uint8[BUFFERSIZE];
memset(mBuffer[i], 0, BUFFERSIZE);
mBufferState[i] = NULL;
}
//In the destructor
for (int i = 0; i < NUM_OF_BUFFERS; i++)
{
delete[] mBuffer[i];
}
出于某种原因,这似乎不起作用。 如果我在析构函数中注释掉那些行,那么程序运行正常,如果我用那些看似冻结的行运行它。
答案 0 :(得分:2)
尝试使用一些静态分析工具,例如cppcheck(它是免费的,多平台和开源的),并针对您的代码运行它。
如果您的代码运行到Visual Studio(一个非常非常好的工具),您甚至可以尝试PVS Studio。
答案 1 :(得分:1)
您发布的代码似乎没有任何问题,因此问题必须存在于您未发布的代码中。
我的赌注是关于一些越界访问,这会破坏堆管理员所需的簿记信息。