C++删除不同函数中的存储空间
C++ delete storage space in a different function from where it was allocated
如果在与最初分配空间的位置不同的函数中删除存储空间,我会得到未定义的行为吗?
typedef struct {
unsigned int Data1;
unsigned int Data2;
unsigned int Data3;
}TData;
void CreateStorage(void)
{
TData *TempData = new TData;
DeleteStorage((unsigned char*)TempData);
}
void DeleteStorage(unsigned char *StorageToDelete)
{
delete (TData*)StorageToDelete;
}
从不同函数中分配和删除内存是完全有效的。
否。
[注意:您不需要该强制转换。]
只要您在同一个库中进行分配和解除分配,它就会被安全删除。
但是,如果在不同的库中进行分配和解除分配,则需要注意一些事项。由于不同库之间的底层类定义可能不同,因此需要确保使用相同的定义。
出现的一个非常常见的问题是,当您使用预编译的开源C++库,并且您的程序和该库使用不同的C++运行库时,当开源库释放程序分配的STL容器实例时,它有时会崩溃,因为该类在开源库中的定义与您的不同。解决此问题的常见解决方法是使用您使用的编译器重新编译开源库。
不,没关系。为什么在DeleteStorage()中将StorageToDelete强制转换为(TData*)?
不,没关系,也不要对结构进行typedef。只要说struct TData { /*...*/ };
。
相关文章:
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 可用存储空间会消耗更多剩余内存吗?
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 我可以在类中存储构造函数的模板参数吗?
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 在头文件中添加命名空间函数
- 命名空间函数的多重定义
- 在多个 cpp 文件中重用未命名的命名空间函数
- 将数组类型更改为 Int16 会节省存储空间吗?
- 存储指向函数返回值的指针
- 将静态空隙方法存储为函数
- 何时应存储指向函数的引用或指针?
- Ubuntu,如何找到内核工作繁重的程序热点?似乎kernel.kallsyms上的函数没有标记为用户空间函数的子级
- 找不到将数组中的元素数存储在函数内的 int 变量中的方法
- 存储从函数返回的数组
- 如何存储对函数的引用,以便稍后可以在节点.js C++插件模块中回调它
- 线程本地存储构造函数 g++
- 我可以使用GCC通过存储的函数指针内联延迟调用吗
- C++删除不同函数中的存储空间