C++删除不同函数中的存储空间

C++ delete storage space in a different function from where it was allocated

本文关键字:存储空间 函数 删除 C++      更新时间:2023-10-16

如果在与最初分配空间的位置不同的函数中删除存储空间,我会得到未定义的行为吗?

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 { /*...*/ };