gpt4 book ai didi

c - 使用 free 理解 malloc 和指针递增

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:48 25 4
gpt4 key购买 nike

<分区>

我试图理解以下代码的输出。

#include <stdio.h>
#include <stdlib.h>

main()
{
int *p = (int *) malloc(sizeof(int));
*p = 42;
*(p+1) = 41;

printf("%d -- %d\n", *p, p);
printf("%d\n", p[0]);
printf("%d -- %d\n", p[1], p+1);

free(p);

printf("%d --- %d\n", *p, p);
printf("%d --- %d\n", p[1], p+1);
}

我的理解,一步一步的,如下:

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

p 现在指向由 malloc 返回的内存块。

*p = 42;

将值 42 存储在 malloc 返回的位置。

*(p+1) = 41;

将值 41 存储在与 malloc 返回值直接相邻的位置。

free(p);

释放p指向的空间,该空间原本是调用malloc获得的,即int 42的位置.

结果:

42 -- 14327824
42
41 -- 14327828
0 --- 14327824
0 --- 14327828

我的理解是地址 14327824 是由 malloc 返回的。当语句

*(p+1) = 41;
执行时,值 41 已存储在 未返回 的 block 中 malloc,即 p+1

当调用 free 时,我知道它释放了 p 指向的空间,即值 42。那么,为什么存储在 p+1 的值也被释放了呢?

此外,如果 malloc 返回指向未初始化存储 block 的指针 pt。位置pt+1 是否超出了malloc 设置的存储区域范围?

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