无法释放给定 Maya 类型的内存
Unable to free memory for a given Maya type
在C++中,我可以保留一些内存,然后删除此内存,例如:
float *myFloat;
myFloat = new float[10];
delete myFloat; --> Works fine
但是,如果该类型不是float *
而是MTransformationMatrix *
(Maya 类型),则我无法删除:
MTransformationMatrix *myTransformationMatrixes;
myTransformationMatrixes = new MTransformationMatrix[10];
delete myTransformationMatrixes; --> Crash
对于特殊类型,我需要做些什么才能释放内存吗?
这两个
分配的对象都是数组,您应该使用delete[]
语法删除它们:
float *myFloat = new float[10];
delete[] myFloat;
MTransformationMatrix *myTransformationMatrixes;
myTransformationMatrixes = new MTransformationMatrix[10];
delete[] myTransformationMatrixes;
你的两个例子都调用了未定义的行为,你只是幸运,第一个没有造成明显的伤害。
您应该使用运算符删除数组delete[]
。当只分配了一个对象而不是数组时,请使用delete
。
当您使用错误的时,它会导致未定义的行为。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 类型总是使用其大小存储在内存中吗
- 使用模板类的自定义列表类型中的内存泄漏
- 具有 STL 向量类型成员的类的复制内存
- 内存中的长长类型表示形式
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 在这种特殊情况下,我是否需要在共享内存中使用原子类型
- 为模板参数类型中的新对象分配内存
- 如何创建非 POD 类型的连续内存池?
- 内存效率:模板与基本数据类型
- POD 结构(相同类型的成员):成员是否位于连续的内存位置?
- 避免在禁用复制的 POD 类型的内存上使用"-Wclass-memaccess"
- 将分配的内存与基本数据类型一起使用时,是否需要新放置? std::complex?
- 数据对齐:限制内存地址为数据类型大小倍数的原因
- 如何为多态性中的指定类型分配内存
- malloc - 运行时内存指针类型分配
- 通过指向非多态类型的基类的指针获取已分配内存的地址
- c++和c#中int类型内存的区别
- 在c++中分配和使用无类型内存块的正确方法是什么?