gpt4 book ai didi

c - 指针运算后释放指针

转载 作者:太空狗 更新时间:2023-10-29 17:27:23 33 4
gpt4 key购买 nike

我的问题很简单。假设我们有:

char* ptr = (char*) malloc(sizeof(char)*SIZE);
ptr+= SIZE/2;
free(ptr);

当我们释放指针时会发生什么?它是未定义的操作吗?它是释放所有 SIZE 缓冲区还是仅释放剩余的 SIZE/2?预先感谢您为我消除歧义。

最佳答案

您的程序可能会崩溃:free() 操作在 C 中实际上非常简单,但仅适用于原始分配的地址。

典型的内存分配器像这样伪代码工作:

  • 要求分配64字节
  • 分配器分配 70 个字节(多 6 个字节)
  • 前 2 个字节设置为“签名”,这是分配器识别的模式,用于标识他分配的内存
  • 接下来的 4 个字节表示分配的大小
  • 返回指向第 7 个字节开始的指针

因此,当您调用 free(ptr) 时,分配器会在您的指针之前的 6 个字节处检查签名。如果找不到签名,它就会崩溃 :)

关于c - 指针运算后释放指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013713/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com