- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 C++ 中,你 can安排一个函数在 new
失败时调用。有没有办法在 malloc
失败时调用一个函数?假设正在从我不想更改的第三方库调用 malloc
。
我认为没有可移植的答案,所以我很乐意接受特定于平台的答案。我在某些平台上使用 Linux+uclibc,在其他平台上使用 Linux+glibc。我打算使用 setrlimit
限制 malloc
可以返回的内存量。
最佳答案
malloc
如果失败则返回 NULL。您应该处理它,以及 CRT 内存函数的其他故障(realloc
尤其容易出错)。
在一般情况下,我认为您必须将内存的所有 CRT 使用包装在您自己设计的函数中,以在错误时重定向。
在 Windows 上,您可以使用 Allocation Hook Functions 连接到 CRT ,这可能是一种做你想做的事情的方法。这为您提供了一个 Hook ,用于通过 onalloc
、onrealloc
、onfree
的逻辑有效地处理 CRT 调用。
我不能保证,因为我是 Windows 用户,但它看起来像 malloc_hook on Linux提供与 Windows Hook 允许的相同。这些方法应该使您能够捕获所有 CRT 内存调用而无需更改第三方库中的代码,假设它们在运行时都使用相同的 CRT - 这总是一个好主意,但至少在 Windows 上不能保证...
关于c++ - 对于 malloc() 失败是否有等效的 set_new_handler()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4305966/
对于类特定的 new_handler 实现,我在“effective c++”一书中遇到了以下示例。这在多线程环境中看起来有问题,我的问题是如何在多线程环境中实现类特定的 new_handler? v
来自 std::set_new_handler new-handler 函数是分配函数在内存分配尝试失败时调用的函数。它的预期目的是三件事之一: 提供更多可用内存 终止程序(例如通过调用 std::t
如果您使用 set_new_handler 并且您的处理程序函数被调用,errno 是否保证被设置,它是从 malloc : 3 The value of errno in the initial t
有人问set_new_handler 在多线程环境下是否安全。我想知道 C++11 和更高版本的 C++ 标准库实现是否使用 thread_local 功能来存储 std::new_handler。如
在 C++ 中,你 can安排一个函数在 new 失败时调用。有没有办法在 malloc 失败时调用一个函数?假设正在从我不想更改的第三方库调用 malloc。 我认为没有可移植的答案,所以我很乐意接
是否需要担心将 set_new_handler 与智能或自动指针结合使用,或者库中包含具有改进错误处理的处理程序? 谢谢 最佳答案 C++自带的智能指针(目前只有auto_ptr,但很快包括share
每当我们使用 set_new_handler (std::new_handler handle_mem_alloc) 来处理内存分配失败时,如果发生任何内存分配失败,那么 handle_mem_all
所以前几天我去编译我正在处理的 VC++ 项目,突然间我几乎所有的文件都出现错误: new.h: error C2039: 'set_new_handler' : is not a member of
我是一名优秀的程序员,十分优秀!