就像所有其他人所说的那样,您的代码会导致未定义的行为(任何事情都可能发生)。
您的堆内存分配器 (malloc) 不负责释放后存储在该区域中的数据。
了解 malloc 的职责将帮助您解释为什么看到结果、为什么它不正确的编程实践以及为什么它不能一直工作。
Malloc 是 glibc 中的堆内存分配器(_int_malloc 和 _int_free)。你可以在这里查看它的代码 [ http://code.woboq.org/userspace/glibc/malloc/malloc.c.html#_int_malloc]。
有人可以解释一下这种行为吗?
一个滑稽的例子将有助于快速澄清你的问题。
假设您正在从一家汽车旅馆 ( sbrk(2) ) 租一个房间 ( memory ),而该汽车旅馆没有任何房间的钥匙 ( memory )!. 你去找接待员 ( malloc ) 并要求一个房间 ( memory ),她给你一个可用的房间,你拿下房间 ( memory ) 并使用它。
你已经完成了它,现在向她保证你不会再次使用它(释放)。她在她的书中做了一个条目,你的房间(记忆)是免费的,可以分配给其他人。把房间给别人或不给别人,完全是她的心愿。
过了一段时间你又来看看你的房间(接待员没有检查你),如果你发现没有人使用房间,你很幸运(它看起来和你离开时一样凌乱!)
接待员(malloc)的工作是尽快为您分配一个房间(内存),相信您在离开后会遵守诺言(免费)。她的工作不是阻止您使用任何房间(记忆) !
如果您访问不允许您访问的地方(只读区域),所有者(内核)会变得愤怒(异常)。
我是新手,我不确定这样回答是否合适。如果我错了,请告诉我我强烈建议你通过 malloc