Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化和删除二维数组_C++_Arrays - Fatal编程技术网

C++ 初始化和删除二维数组

C++ 初始化和删除二维数组,c++,arrays,C++,Arrays,我看过其他几个线程,但似乎不知道如何删除2d数组 下面是我初始化数组的方法数量项目和容量是预先确定的变量: int **P = new int *[num_items]; for (x = 0; x <= num_items; x++) P[x] = new int[capacity]; int**P=newint*[num_items]; for(x=0;x您的注释“不需要向num_项添加+1”和for循环的实现相互矛盾 请记住,数组是以0为基础的,因此p的有效索引为0到,

我看过其他几个线程,但似乎不知道如何删除2d数组

下面是我初始化数组的方法<代码>数量项目和容量是预先确定的变量:

int **P = new int *[num_items]; 
for (x = 0; x <= num_items; x++)
     P[x] = new int[capacity];
int**P=newint*[num_items];
for(x=0;x您的注释“不需要向num_项添加+1”和for循环的实现相互矛盾

请记住,数组是以0为基础的,因此p的有效索引为0到,但不包括num_项。但是,在for循环中,x的值为0到,包括num_项

因此,解决办法很可能是可行的

for (x = 0; x < num_items; x++)
    /* whatever */
(x=0;x /*随便*/

所有这些,你能用std::vector来代替吗?那么,你不必担心这种内存管理。

你的问题是你的数学:

int **P = new int *[num_items];
for (x = 0; x <= num_items; x++) // PROBLEM!
     P[x] = new int[capacity];
然后

for(x = 0; x < num_items; x++)
    delete [] P[x];
delete [] P;
(x=0;x 删除[]P[x]; 删除[]P;
也就是说,使用
std::vector
将是更好的解决方案。

我还建议查看一下,因为使用
vector
仍然意味着一个可能不完整的矩阵。很抱歉,该评论是为了其他目的,我想在发布之前删除它。这是出于教育目的:永远不要调用new/delete yourself,使用s相反,mart指针(and)。@user2176127从来都不算太多。在某些情况下,您需要自己管理内存(这应该在类的上下文中完成),但这种情况很少。
int **P = new int *[num_items];
for (x = 0; x < num_items; x++)
     P[x] = new int[capacity];
for(x = 0; x < num_items; x++)
    delete [] P[x];
delete [] P;