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

时间:2016-02-26 08:22:59

标签: c pointers malloc undefined-behavior

所以我只是想在添加注释行时这是一个未定义的行为。虽然没有编译错误,但它们都给出了相同的答案。我想知道有什么不同。地址是否被a的地址覆盖。如果有人这样做(即为b分配内存),var user = getUsers(user,pass,urole) console.log(user) 会是一个很好的解决方案。这可能是一个微不足道的例子,但我想了解其中的区别。

memcpy()

3 个答案:

答案 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()