函数返回malloc中的C错误?

问题描述:

我被给了C中的一段代码,并且问到它的问题是什么问题呢?我会很好的回答,但malloc铸件前面的星号会让我感到困惑!函数返回malloc中的C错误?

char f() { return *(char*)malloc(10); } 
+1

恕我直言,这星号是错误的功能。 – Haris

+4

提示:'*'是取消引用'malloc'返回的指针。 – dbush

+0

是的,但我需要详细阐述它,就像它对整个代码做的事情一样。而且即使有星号,代码也会编译得很好...... – theViTALiTY

该函数返回一个不确定的值,并有内存泄漏,因为动态分配的内存没有被释放。

+0

哦,是的,这样的分配将永远无法获得释放。我失去了理智,因为所有代码都可以,因为malloc返回指向void的指针,将其转换为char指针,然后解除引用未知值。我甚至从来没有想过它将失去分配块的地址,因此它不能被释放! 非常感谢各位朋友! – theViTALiTY

+0

@theViTALiTY根本没有。我们初学者应该互相帮助。:) –

+0

“*返回一个不确定的值*”我会说它在用于分配“something”时更引发UB:'char ch = f();' – alk

有几个问题与此代码:

  • malloc返回值没有检查,如果它是NULL取消引用。所以如果malloc失败,这将导致NULL指针解引用,并可能导致核心转储。
  • 假设malloc成功,它返回的内存未初始化为任何内容。该函数解引用指针并返回分配内存中的第一个字节,该字节也是未初始化的。这意味着函数返回一个未初始化的字符。
  • malloc返回的指针不保存在任何地方。这导致内存泄漏。