这是一个未定义的行为吗?

Aru*_*har 2 c malloc pointers undefined-behavior

所以我只是想问一下,添加注释行时这是一个未定义的行为.虽然没有编译错误,但它们都给出了相同的答案.我想知道有什么不同.地址是否被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;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 8

当您取消注释//b=malloc(sizeof(int));部分时,您最终会创建内存泄漏,因为稍后,您将丢失返回的指针,malloc()并且将无法使用free()它.

FWIW,a当你用malloc()地址覆盖ed内存时,你已经遇到了问题c.

不过,这不是UB,反正是一种不好的做法.

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

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