内存使用malloc()而没有c中的强制转换

时间:2016-09-16 10:00:29

标签: c malloc

只是想知道,我使用malloc分配内存而没有强制转换。 e.g

 char *ptr = malloc(26);

它正在与GCC成功编译而没有错误。使用这个表达式分配内存是否安全?

此外,以下表达式之间是否有任何区别?

char *ptr = malloc(26); 

char *ptr = (char*) malloc(26 * sizeof(char));

1 个答案:

答案 0 :(得分:1)

这是安全的。它经常被完成,因为你只需要更改*ptr的类型而不是强制转换,以便它更易于维护。

malloc为您提供void*,可以隐式地转换为任何其他指针。

在第二个问题中,语句(如果使用sizeof char而不是*char)之间应该没有区别,因为char应始终是最小的内存单元。

sizeof char* btw不是sizeof charsizeof char*为您提供指针的大小,可能是4或8,具体取决于您的架构。

最好的方法是再次char *ptr = malloc(26 * sizeof *ptr);这更易于维护,因为您只需要更改*ptr的数据类型。