对于malloc()失败,是否存在等效的set_new_handler()?

use*_*876 5 c c++ malloc glibc uclibc

在C++中,您可以安排在new失败时调用函数.有没有办法在malloc失败时调用一个函数?假设malloc从第三方库中调用,我不想更改.

我不认为有一个可移植的答案,所以我很乐意接受特定于平台的答案.我在某些平台上使用Linux + uclibc,在其他平台上使用Linux + glibc.我打算用来setrlimit限制malloc可以返回的内存量.

Ste*_*end 11

malloc如果失败则返回NULL.你应该处理那个,以及来自CRT记忆功能的其他故障(realloc尤其容易出错).

在一般情况下,我认为你必须将所有CRT内存的使用包装在你自己设计的函数中,以便重定向错误.

在Windows上,您可以使用分配挂钩功能挂钩到CRT ,这可能是您想要的方式.这使您通过逻辑处理CRT呼吁钩onalloc,onrealloc,onfree,有效.

我不保证,因为我是Windows的人,但看起来Linux上的malloc_hook提供与Windows钩子允许的相同.这些方法应该能够捕获所有CRT内存调用,而无需更改第三方库中的代码,假设它们在运行时都使用相同的CRT - 总是一个好主意,但至少在Windows上无法保证......