可以手动泄漏内存吗?

时间:2013-10-11 05:19:09

标签: c++ memory memory-management memory-leaks

所以我想知道如果我把'\ 0'放在“malloc”内存中间会发生什么。

我发现了这个问题。 Memory Leak when freeing a char array

在Jesse Good的回答中,它说这行将打印出“malloc”内存的大小。

std::cout << *((std::size_t*)arr - 1) << std::endl;

这是否意味着如果我修改((std :: size_t )arr - 1)的值,当我调用“free”时将释放的内存大小将不同,如果修改后的值小于原始值,会导致内存泄漏吗?

1 个答案:

答案 0 :(得分:6)

您所指的答案具有误导性。阅读接受的答案。

确实,如果您的系统使用某些内存分配器,则可以读取内存块之前的size_t值以确定该块的大小。但是:

  • 并非所有内存分配器都以这种方式工作。有些会在该位置存储其他值,例如指向其他内存块的指针,有些则不会将它用于对您有意义的任何内容。
  • 在已分配块之外读取内存的结果是未定义。在某些情况下,分配块之前的地址可能在进程的内存空间之外,访问它将导致段错误。
  • 修改该值很可能会破坏内存分配器的状态,并导致程序在分配或释放内存时出现错误和/或崩溃。

不要在分配区域之外读取或写入内存。