繁体   English   中英

如何检查是否使用 malloc 或 new 分配了内存

[英]how to check if memory is allocated using malloc or new

我正在处理一些遗留的 C/C++ 代码,其中使用malloc以及使用new分配malloc 我想创建一个通用的包装函数来使用freedelete []释放内存,具体取决于它的分配方式。

有没有办法确定如何分配内存? 这是一个伪代码。

double *x;
double *y;
x = (double *) malloc(size);
y = new double [size]

doSomething();
deallocateMemory(x, y);

我想要deallocateMemory来确定是调用free还是delete [] 任何帮助,将不胜感激。

一旦获得所有权,就将原始指针包装在适当的智能指针(例如std::unique_ptrstd::shared_ptr )中。

另外,订购一只九尾猫并鞭打造成混乱的人。

在此处输入图片说明

您可以自己实现malloc()而不是使用标准库提供的实现。 您还可以重载运算符newdelete 没有什么可以阻止您将自己的簿记添加到这些实现中的任何一个中,所以是的,这是完全可能的。

是否推荐? 不,不是。

这有点像实现垃圾收集的尝试。 如果这是真的,您就是从错误的角度看待 C++。 C++确实有它的清理工具,也就是它的析构函数。 有现成的指针容器实现,它们在析构函数中清理分配的内存。 其他人已经提到过他们,我不会从其他人的答案中复制粘贴。

你想写

用于释放内存的通用包装函数

那么你需要写

用于分配内存的通用包装函数

而且,根本不推荐。 尽量使你的目标干净。 如果您必须在代码的某些部分处理malloc/free指针并且您无法修改malloc部分,那么尽量不要将该部分与您的new/delete部分混合。

否则,您没有标准方法来确定指针使用哪种分配方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM