gpt4 book ai didi

c - 为什么用 += 添加到指针有效,而指针 + 1 无效?

转载 作者:太空狗 更新时间:2023-10-29 16:32:55 26 4
gpt4 key购买 nike

我正在为一个数组分配内存,但我正在移动指针指向的位置。访问元素工作正常。它开始产生释放分配内存的问题。 Malloc 提示被释放的指针从未被分配。这个问题可以用这个简化的代码重现:

int *pointer = malloc(sizeof(int)) + 1;
free(pointer - 1);

我开始试验,发现代码的这种细微变化是可行的。

int *pointer = malloc(sizeof(int));
pointer += 1;
free(pointer - 1);

+= 与仅在一行中将 malloc 返回的指针加 1 有何不同?

最佳答案

malloc的返回类型是void *,按照标准,不能用于指针运算。

但是,有一个 GNU 扩展将 sizeof(void) 视为 1,这就是您的第一个片段编译的原因。稍后,pointer - 1 减去 sizeof(int) 而不是 1,因此指针不匹配。

在进行指针运算时应用的实际偏移量始终取决于指针的类型。由于 pointer 是一个 int *,实际偏移量将乘以 sizeof(int)。如果 sizeof(void)1 或者如果它是一个 char * 指针 (sizeof(char) == 1 ), 没有乘法发生。

关于c - 为什么用 += 添加到指针有效,而指针 + 1 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28256350/

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