1

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

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

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

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

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

4

1 回答 1

6

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

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

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

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

于 2013-10-11T05:25:09.917 回答