【发布时间】:2015-12-28 06:10:19
【问题描述】:
我在 C++ 中使用 2D 指针矩阵(使用 Visual Studio 2015)。我创建了矩阵并在完成后将其删除。
typedef unsigned char U8;
typedef unsigned int U32;
U8** A0 = new U8*[M0];
for (U32 i = 0; i < M0; ++i)
{
A0[i] = new U8[m_L0];
}
for (U32 i = 0; i < M0; ++i){
if (i < m_L0)
{
delete[] A0[i];
A0[i] = NULL;
}
}
delete[] A0;
A0 = NULL;
但是,我得到了如下图所示的错误。在删除之前我需要检查矩阵不为空吗?
我怎么了?你能帮我修一下吗?这是我的完整源代码
#include <iostream>
#include <stdlib.h>
#include <time.h> /* time */
#define random(x) (rand()%x)
typedef unsigned char U8;
typedef unsigned int U32;
class CData
{
private:
U8* m_Data;
U32 m_Len;
public:
CData(void) : m_Data(NULL), m_Len(0)
{
}
~CData(void)
{
FreeData();
}
void FreeData()
{
if (m_Data)
{
delete[] m_Data;
m_Data = NULL;
}
}
};
void create_and_delete_matrix()
{
U32 M0;
U32 m_L0;
U32 range = 20;
M0 = random(range);
m_L0 = random(range);
U8** A0 = new U8*[M0];
for (U32 i = 0; i < M0; ++i)
{
A0[i] = new U8[m_L0];
}
for (U32 i = 0; i < M0; ++i) {
for (U32 j = 0; j < m_L0; ++j) {
A0[i][j] = random(2);
printf("%d ", A0[i][j]);
}
printf("\n");
}
CData** D0 = new CData*[M0];
for (U32 i = 0; i < M0; ++i){
D0[i] = new CData();
}
//free A0, C0, D0 matrix
for (U32 i = 0; i < M0; ++i){
if (i < m_L0)
{
delete[] A0[i];
A0[i] = NULL;
}
delete D0[i];
D0[i] = NULL;
}
delete[] A0;
A0 = NULL;
delete[] D0;
D0 = NULL;
}
int main(int argc, char **argv) {
unsigned int time_ui = static_cast<unsigned int>(time(NULL));
srand(time_ui);
for (U32 iter = 0; iter < 100; iter++){
create_and_delete_matrix();
}
return 0;
}
【问题讨论】:
标签: c++ visual-studio matrix visual-studio-2015