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

时间:2010-11-29 16:51:38

标签: c++ c malloc glibc uclibc

在C ++中,can安排在new失败时调用函数。有没有办法在malloc失败时调用函数?假设从我不想更改的第三方库调用malloc

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

1 个答案:

答案 0 :(得分:11)

malloc如果失败则返回NULL。您应该处理这个问题,而CRT内存函数的其他失败(realloc尤其容易出错)。

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

在Windows上,您可以使用Allocation Hook Functions挂钩到CRT,这可能是您想要的方式。这为您提供了一个钩子,可以通过onalloconrealloconfree的逻辑有效地处理CRT调用。

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