在C ++中创建一个动态的对象数组,删除对象和空闲内存

时间:2014-02-21 07:54:32

标签: c++

各位大家好!我是C ++的初学者,所以我没有很好的经验。

我想要一些帮助,

我尝试创建对象(type ELEMENT)的动态数组,当我想从数组中删除对象时出现问题(错误2157)

这是代码的一部分:

class ELEMENT
{
private :
     int id_num;
     int nbnr;
     int BI;
public :
: void () ................
: ...............
:  
 };

 ELEMENT *T;   

/* before calling the next fonction, I allocate a dynamic memory space every time for T by
 T = new TAB;  because I don't know the exact size of T, I don't know if it's right like this ?
*/

void eval (int nr, int BS)
{

for (int i=0; i< size; i++)
{if (T [i].BI >= BS)
delete T [i];   // I try to delete the object in position (i) and also free allocated memory
// before I tried with delete [] T; doesn't work !
}

}

另一个问题是,是否有任何函数可以获得T的当前大小。 我试过SizeOf(T)没有给出正确的价值。

这就是全部,谢谢你的答案!

3 个答案:

答案 0 :(得分:2)

您需要决定数组的大小,然后动态分配为

T = new ELEMENT[size];

这会创建一个ELEMENT项目数组,您可以使用

删除一次
delete [] T;

你不应该在T的每个元素上调用delete。唯一需要的时候就是T包含动态分配内存的指针(在你的情况下它们不是这样)所以不要这样做。

使用动态分配的数组无法获得T的大小。但是,如果您使用std::vector代替,则可以执行此操作,而且根本不必担心内存分配和释放。

答案 1 :(得分:0)

首先,您无法从数组中删除一个元素并释放内存。您只能按delete[]删除while数组。

其次,您将T定义为ELEMENT的指针,因此sizeof()将返回指针大小,但不会返回数组的大小。您可以自己记住大小,也可以将T定义为ELEMENT T[10]等数组。

答案 2 :(得分:-1)

使用语句ELEMENT * T,您已创建指向ELEMENT类对象的指针,但该指针当前未初始化(它未指向任何对象)。使用

ELEMENT *T = new ELEMENT;

初始化指向对象的指针。

对于数组的大小,您可以使用

sizeof(nameOfYourArray)/sizeof(nameOfYourArray[0])

通过将总字节数除以第一个元素占用的字节数来计算数组的大小。

希望这有帮助!