如何模拟内存分配错误

Ome*_*Zak 22 c linux gcc unit-testing memory-management

我的C应用程序使用第三个库,它们进行自己的内存管理.为了保持健壮,我的应用程序具有代码来处理由于缺少可用内存而导致的库函数故障.

我想测试这段代码,为此,我需要模拟由于内存不足而导致的故障.

推荐使用什么工具?我的环境是Linux/gcc.

fre*_*ace 22

您可以使用ulimit来限制用户可以使用的资源量,包括内存.所以你创建了一个测试用户,将他们的内存使用限制到足以启动你的程序的东西,然后看着它死掉:)

例:

ulimit -m 64
Run Code Online (Sandbox Code Playgroud)

设置内存限制为64kb.


Vin*_*vic 13

创建自己的malloc包装器,它将随机返回null而不是有效指针.好吧,或者如果你想进行单元测试,它会一直失败.


Chr*_*ton 8

在过度使用内存的操作系统(例如,Linux或Windows)上,根本无法处理内存不足错误.malloc可能会返回一个有效的指针,稍后,当您尝试取消引用它时,您的操作系统可能会确定您的内存不足并终止该进程.

http://www.reddit.com/comments/60vys/how_not_to_write_a_shared_library/是一个很好的写作.

  • 如果禁用过度使用,那么您就不再处于过度使用内存的系统上;我的评论是关于过度使用内存的系统。在许多情况下,您(程序员)没有能力禁用过度使用。您指向 oom_pardon 讨论的链接非常有趣。:) (2认同)

All*_*ind 6

您可以使用与第三方库相同的界面编写自己的模拟库,而不是它.您还可以使用LD_PRELOAD覆盖第三方库的选定功能.