sách gpt4 ai đã đi

关于 free() 的 C 题

In lại 作者:行者123 更新时间:2023-12-01 08:58:03 29 4
mua khóa gpt4 Nike

#include 
int main ()

{

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

p++;

free(p);

/* do something */

trả về 0;

}

câu hỏi:

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

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

    <

1 Câu trả lời

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

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

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

29 4 0
Bài viết được đề xuất: python - CSV 到嵌套(分层)JSON - 使用 Python 标记父项
Bài viết được đề xuất: xcode - 重启 Xcode 后找不到库
Bài viết được đề xuất: c++ - C++20 的内存模型与 C++11 的内存模型有何不同?
Bài viết được đề xuất: java - 如何在3D空间中添加文本?
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com