函数返回malloc中的C错误?
我被给了C中的一段代码,并且问到它的问题是什么问题呢?我会很好的回答,但malloc铸件前面的星号会让我感到困惑!函数返回malloc中的C错误?
char f() { return *(char*)malloc(10); }
该函数返回一个不确定的值,并有内存泄漏,因为动态分配的内存没有被释放。
哦,是的,这样的分配将永远无法获得释放。我失去了理智,因为所有代码都可以,因为malloc返回指向void的指针,将其转换为char指针,然后解除引用未知值。我甚至从来没有想过它将失去分配块的地址,因此它不能被释放! 非常感谢各位朋友! – theViTALiTY
@theViTALiTY根本没有。我们初学者应该互相帮助。:) –
“*返回一个不确定的值*”我会说它在用于分配“something”时更引发UB:'char ch = f();' – alk
有几个问题与此代码:
- 的
malloc
返回值没有检查,如果它是NULL取消引用。所以如果malloc
失败,这将导致NULL指针解引用,并可能导致核心转储。 - 假设
malloc
成功,它返回的内存未初始化为任何内容。该函数解引用指针并返回分配内存中的第一个字节,该字节也是未初始化的。这意味着函数返回一个未初始化的字符。 - 由
malloc
返回的指针不保存在任何地方。这导致内存泄漏。
恕我直言,这星号是错误的功能。 – Haris
提示:'*'是取消引用'malloc'返回的指针。 – dbush
是的,但我需要详细阐述它,就像它对整个代码做的事情一样。而且即使有星号,代码也会编译得很好...... – theViTALiTY