5

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

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

4

1 回答 1

11

malloc如果失败则返回 NULL。您应该处理它,以及 CRT 内存功能的其他故障(realloc尤其是容易出错)。

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

在 Windows 上,您可以使用分配挂钩函数连接到 CRT ,这可能是一种做您想做的事情的方法。onalloc这为您提供了一个挂钩,可以通过, onrealloc, ,的逻辑有效地处理 CRT 调用onfree

由于我是 Windows 用户,因此我不做任何保证,但看起来Linux 上的 malloc_hook提供的功能与 Windows 挂钩所允许的相同。这些方法应该使您能够在不更改第三方库中的代码的情况下捕获所有 CRT 内存调用,假设它们在运行时都使用相同的 CRT - 总是一个好主意,但至少在 Windows 上不能保证......

于 2010-11-29T16:53:35.020 回答