所以我只是想在添加注释行时这是一个未定义的行为。虽然没有编译错误,但它们都给出了相同的答案。我想知道有什么不同。地址是否被a的地址覆盖。如果有人这样做(即为b分配内存),var user = getUsers(user,pass,urole)
console.log(user)
会是一个很好的解决方案。这可能是一个微不足道的例子,但我想了解其中的区别。
memcpy()
答案 0 :(得分:8)
当您取消注释//b=malloc(sizeof(int));
部分时,您最终会创建memory leak,之后,您将丢失malloc()
返回的指针,并且无法free()
1}}它。
FWIW,当您使用a
的地址覆盖malloc()
内存时,您已遇到问题c
。
不是UB ,但无论如何都是一种不好的做法。
对于上述代码,您可以安全地删除malloc()
。你不需要它们。
尽管如此,int main()
至少应该int main(void)
符合标准。
答案 1 :(得分:2)
b=malloc(sizeof(int));
int c=6;
a=&c;
b=a;
由于b
的值在使用之前已更改,因此您将malloc
的返回值指定为b
没有任何区别。但是,你没有free
它,所以你泄漏了分配的内存。
没有UB。
答案 2 :(得分:2)
我认为此代码不会导致未定义的行为,但此代码确实会导致内存泄漏。
如果您不需要额外的缓冲区,请不要使用malloc()
。