gpt4 book ai didi

c - 这是未定义的行为吗?

转载 作者:行者123 更新时间:2023-12-04 10:32:31 25 4
gpt4 key购买 nike

所以我只想问一下,添加注释行时这是未定义的行为吗?虽然没有编译错误,而且他们都给出了相同的答案。我想知道有什么区别。地址是否被a的地址覆盖。此外,如果要这样做(即为 b 分配内存),memcpy() 是否是一个很好的解决方案。这可能是一个微不足道的例子,但我想了解其中的区别。

#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a;
int *b;
a=malloc(sizeof(int));
//b=malloc(sizeof(int));
int c=6;
a=&c;
b=a;
printf("%d\n",*b);
return 0;
}

最佳答案

当您取消注释 //b=malloc(sizeof(int)); 部分时,您最终将创建 memory leak ,稍后,您将丢失 malloc() 返回的指针,并且无法free() 它。

FWIW,您已经遇到了 a 的问题,因为您用 c 的地址覆盖了 malloc()ed 内存.

不过,这不是 UB,无论如何,这是一种不好的做法。

对于上面的代码,您可以安全地删除两个 malloc()。你不需要它们。

也就是说,int main() 应该是 int main(void),至少要符合标准。

关于c - 这是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35646781/

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