我得到了一段 C 代码,被问到的问题是它有什么问题?我会很好回答,但是malloc cast前面的星号让我感到困惑!
char f() { return *(char*)malloc(10); }
该函数返回不确定的值,并且由于未释放动态分配的内存而存在内存泄漏。
此代码存在几个问题:
- 取消引用
malloc
的返回值,而不检查它是否为 NULL。 因此,如果malloc
失败,这将导致 NULL 指针取消引用,并可能导致核心转储。 - 假设
malloc
成功,它返回的内存不会初始化为任何内容。 该函数取消引用指针并返回分配内存中的第一个字节,该字节再次未初始化。 这意味着该函数返回一个未初始化的字符。 malloc
返回的指针不会保存在任何位置。 这会导致内存泄漏。