C++ 如何在CPP中删除动态非矩形二维数组

C++ 如何在CPP中删除动态非矩形二维数组,c++,arrays,pointers,memory,dynamic,C++,Arrays,Pointers,Memory,Dynamic,这是我写的一些代码,只是为了理解如何使用指针。 这里我想分配并显示一个二维Pointerarray intmain() { constexpr int size=10; int**2DU数组=新int*[size]; 对于(int i=0;i

这是我写的一些代码,只是为了理解如何使用指针。 这里我想分配并显示一个二维Pointerarray

intmain()
{
constexpr int size=10;
int**2DU数组=新int*[size];
对于(int i=0;i
在你这样做之后:

*(_2darray + i) = new int[0];  
for ( int j = 0; j <= i; j++ )

for(int j=0;j您的删除逻辑是正确的


错误消息表示您的程序正在写入超出范围的内存。比较
j删除逻辑是正确的。不幸的是,在创建数组之后的某个时候,在删除数组之前,程序会超出范围,并损坏存储在数组附近的一些重要簿记信息。查找发生这种情况的位置当我看到一个循环带有
时,我总是担心问题是
*(\u 2darray+I)=new int[I];
,因为for循环是用I=0初始化的。你在分配一个数组,其中包含零项,然后向它写入
int**\u 2darray=new int*[size];
大小
指针分配。
*(\u 2darray+i)=新的int[i]
分配给
i int
并依次将该块的起始地址分配给指针。当您要释放内存时,必须首先在指针上循环,释放分配给
int
的块,然后再释放指针块。
for(int i=0;i
然后释放你的指针块,
删除[]\u 2darray;
(注意:没有“数组”,你已经分配了内存块)另外注意:
\u 2darray[i]
\u 2darray[i][j]
是可读的
for ( int i = 0; i < size; i++ )
{
    *(_2darray + i) = new int[i];
     //...
}  
*(_2darray + i) = new int[0];  
for ( int j = 0; j <= i; j++ )
for ( int j = 0; j < i; j++ )