gpt4 book ai didi

c++ - 更改指针后,free() 将释放多少字节?

转载 作者:行者123 更新时间:2023-11-30 21:41:47 25 4
gpt4 key购买 nike

我有以下代码。

char* p = malloc(10);
p = p + 1;
free(p);

在上面的代码中,

  1. 调用malloc(10)时malloc如何返回内存地址?
  2. free(p) 将释放多少字节?
  3. free() 如何知道要释放多少字节?

最佳答案

正如 free 的手册页将告诉您的那样,除了从 malloc 返回的指针之外的任何参数都具有未定义的行为:

The free() function frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behavior occurs. If ptr is NULL, no operation is performed

关于free如何知道 block 的大小:典型的内存分配器实现有每个 block 的 header (包含大小、空闲列表指针等)和free知道此 header 的大小以及距 malloc 返回的指针的偏移量。

这也回答了您的第一个问题:malloc 分配这样一个 block 并返回一个指向实际对象开头的指针。

关于c++ - 更改指针后,free() 将释放多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50550723/

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