创建对象的动态数组,删除对象并释放C++内存
create a dynamic array of object, delete object and free memory in 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)
没有给出正确的价值。
就是这样,感谢您的回答!
您需要决定数组的大小,然后动态分配为
T = new ELEMENT[size];
这将创建一个 ELEMENT 项数组,您可以使用这些项删除一次
delete [] T;
不应对 T 的每个元素调用 delete。您唯一需要它的情况是 T 包含指向动态分配内存的指针(在您的情况下它们没有),因此不要这样做。
没有办法使用动态分配的数组来获取 T 的大小。但是,如果您要改用std::vector
则可以执行此操作,并且根本不用担心内存分配和释放。
首先,您不能从数组中删除一个元素并释放内存。您只能通过 delete[]
删除 while 数组。
其次,你定义T
为ELEMENT
的指针,所以sizeof()
将返回指针大小,但不返回数组的大小。您可以自己记住大小,也可以T
定义为数组,例如 ELEMENT T[10]
。
使用语句 ELEMENT *T 创建了一个指向类 ELEMENT 对象的指针,但该指针当前未初始化(它不指向任何对象)。用
ELEMENT *T = new ELEMENT;
初始化指向对象的指针。
对于您可以使用的数组大小
sizeof(nameOfYourArray)/sizeof(nameOfYourArray[0])
通过将总字节数除以第一个元素占用的字节数来计算数组的大小。
希望这有帮助!
相关文章:
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何在向量中释放指针?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- C++:在被本地字符串捕获后释放或销毁 malloc'd char *?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 如果分配数组引发异常,是否应该释放该数组