C++ 如何从自定义数组中删除元素
下面是我的代码C++ 如何从自定义数组中删除元素,c++,arrays,C++,Arrays,下面是我的代码 Box **b = 0; //memory allocated for elements of rows. b = new Box *[ROWS] ; //memory allocated for elements of each column. for( int i = 0 ; i < ROWS ; i++ ) b[i] = new Box[COLUMNS]; b[0][0] = NULL; 框**b=0; //为行元素分配的内存。 b=新框
Box **b = 0;
//memory allocated for elements of rows.
b = new Box *[ROWS] ;
//memory allocated for elements of each column.
for( int i = 0 ; i < ROWS ; i++ )
b[i] = new Box[COLUMNS];
b[0][0] = NULL;
框**b=0;
//为行元素分配的内存。
b=新框*[行];
//为每列的元素分配的内存。
对于(int i=0;i
为什么在代码的最后一行出现错误:“没有可行的重载“=”。代码中有一些错误。首先,当您的类型是
Box
时,为什么要分配int
?这应该是b=新框*[行]
或b[i]=新框[列]代码>分别为
此外,您正在尝试设置一个内存位置,该位置以前已通过删除
释放,这是危险的,可能会导致不可预见的后果
这条线
b[0][0] = NULL;
不可能,因为您在b[0][0]
处的键入不是Box*
,而是Box
new int*
将返回一个int**
。编译器抱怨此int**
无法转换为Box**
(类型为b
)。您声明了一个Box
的锯齿数组,但分配了新int*[]
-这是怎么回事
而且b[0][0]
将是Box&
类型。除非
Box::Box
具有一个隐式构造函数,该构造函数接受一个类型为NULL
可转换的参数
Box::Box
定义了一个赋值运算符重载,该重载使用这样的参数
您没有在类框中重载“=”
b[0][0] = NULL;
这是错误的,原因有二:
b[0][0]
指的是对象类型Box
(因为b
是Box**
,所以b[0]
是Box*
)。您试图将指针指定给它,这是一个错误(除非Box
可从指针转换)
- 您刚刚删除了
b
指向的内存,因此取消对它的引用仍然是一个错误
把那条线去掉。根据您计划在以后对b
执行的操作,分配b=NULL
以避免指针悬空可能是有意义的。+1对于实际使用数组delete[]
,即使您混淆了其余部分:)最后一行可能会给您一个运行时错误,当您写入未分配的内存时。我还没有看到如此混乱的代码:/抱歉,伙计们,我编辑了我的代码。这应该是正确的