为什么我们需要转换malloc返回的内容?

use*_*466 6 c heap malloc

    int length = strlen(src);
    char *structSpace = malloc(sizeof(String) + length + 1);
    String *string = (String*) structSpace;    
    int *string = (int*) structSpace;
Run Code Online (Sandbox Code Playgroud)

*我创建了一个名为String的结构

And*_*son 16

你没有.void*将隐含地投射到C中您需要的任何内容.另请参阅C常见问题解答,了解为什么您希望明确避免在C中转换malloc的返回.@ Sinan的答案进一步说明了为什么不一致地遵循这一点.

  • 正确,您不应该在C ++中使用malloc。 (2认同)

Ed *_* S. 6

因为malloc返回一个指向void的指针,即它只是分配内存块而不考虑将存储在那里的数据.在C++中,您返回的void*不会隐式地转换为您的类型的指针.在您的示例中,您还没有转换malloc返回的内容.Malloc返回了一个void*,它被隐式地转换为char*,但是在下一行你...好吧,它再也没有多大意义了.