可以手动泄漏内存吗?

whi*_*kar 1 c++ memory memory-leaks memory-management

所以我想知道如果我把'\ 0'放在"malloc"ed内存的中间会发生什么.

我遇到了这个问题.释放char数组时内存泄漏

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

std::cout << *((std::size_t*)arr - 1) << std::endl;
Run Code Online (Sandbox Code Playgroud)

这是否意味着如果我修改((std :: size_t)arr - 1)的值,当我调用"free"时将释放的内存大小将不同并且如果修改后的值小于原值?

dus*_*uff 6

你所指的答案是误导性的.阅读接受的答案.

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

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

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