Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建随机内存分配失败?_C++_Memory_Heap_Ulimit_Pageheap - Fatal编程技术网

C++ 如何创建随机内存分配失败?

C++ 如何创建随机内存分配失败?,c++,memory,heap,ulimit,pageheap,C++,Memory,Heap,Ulimit,Pageheap,我最近发现了一个Windows调试工具。它的选项/fault允许每隔一段时间注入内存分配失败。比如,我希望每100或1000次分配失败一次,由你决定。我们在linux上有类似的东西吗 我可以想到ulimit,但这不完全是同一回事,它会使每次后续分配在内存到达时失败,而不仅仅是一次。您应该能够编写自己的。看看:。是的,您可以使用LD_PRELOAD做类似的事情;您需要编译如下内容: #include <dlcfn.h> void *malloc(size_t size) { st

我最近发现了一个Windows调试工具。它的选项/fault允许每隔一段时间注入内存分配失败。比如,我希望每100或1000次分配失败一次,由你决定。我们在linux上有类似的东西吗


我可以想到ulimit,但这不完全是同一回事,它会使每次后续分配在内存到达时失败,而不仅仅是一次。

您应该能够编写自己的。看看:。

是的,您可以使用
LD_PRELOAD
做类似的事情;您需要编译如下内容:

#include <dlcfn.h>

void *malloc(size_t size) {
  static unsigned count = 0;
  static void *(*real_malloc)(size_t) = NULL;

  if (!real_malloc)
    real_malloc = dlsym(RTLD_NEXT, "malloc");

  if (++count == 100) {
    count = 0;
    return NULL;
  }

  return real_malloc (size);
}
完成此操作后,您可以按如下方式运行程序:

LD_PRELOAD=/path/to/libmy_malloc.so ./my_program
它将调用替换
malloc()
例程

我猜想上面的预构建版本中有更多的调试功能,但是你明白了


哦,顺便说一下,上面的代码没有经过测试(在堆栈溢出中编写)。它也不是线程安全的,如果替换malloc(),您需要线程安全,因此您需要使用
pthread\u once()
,以及
pthread\u互斥体
API来解决这个问题。

这很有趣。我可以假设新的
操作员也会调用这个malloc吗?@qdii:不,但你也可以替换它。在C++中,它甚至是标准的,所以你不需要一个代码> LDYPrimultLD_PRELOAD=/path/to/libmy_malloc.so ./my_program