gpt4 book ai didi

关于 free() 的 C 题

转载 作者:行者123 更新时间:2023-12-01 08:58:03 28 4
gpt4 key购买 nike

#include <stdio.h>
int main ()

{

int *p = (int *)malloc((100*sizeof(int)));

p++;

free(p);

/* do something */

return 0;

}

问题:

  1. 从位置 p+1 开始的内存是否会被释放(假设 malloc 返回 0x1000,释放的内存将从 0x1004 开始,假设是一个 4 字节整数)?

  2. 除了从 0x1000 开始的 4 个字节(如果 malloc 返回 0x1000)不可用(除非你执行 p-- 并使用地址)这一事实之外,这段代码是否有任何缺陷

    <

最佳答案

这是未定义的行为 - 您必须将与从 malloc() 获得的指针完全相同的指针传递给 free()。使用您的代码,任何事情都可能发生 - 可能会损坏堆。

这样想。 free() 只有一个参数,因此它必须从那个参数中推断出要标记为免费的内容。没有办法“释放更少的内存”——要么释放所有内存(顺便说一句,为此所需的扣除将非常耗时),或者发生不好的事情——后者更有可能。你不应该假设任何事情,只是不要那样做。

关于关于 free() 的 C 题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4387153/

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