只是想知道,我使用malloc
分配内存而没有强制转换。 e.g
char *ptr = malloc(26);
它正在与GCC成功编译而没有错误。使用这个表达式分配内存是否安全?
此外,以下表达式之间是否有任何区别?
char *ptr = malloc(26);
和
char *ptr = (char*) malloc(26 * sizeof(char));
答案 0 :(得分:1)
这是安全的。它经常被完成,因为你只需要更改*ptr
的类型而不是强制转换,以便它更易于维护。
malloc
为您提供void*
,可以隐式地转换为任何其他指针。
在第二个问题中,语句(如果使用sizeof char
而不是*char
)之间应该没有区别,因为char
应始终是最小的内存单元。
sizeof char*
btw不是sizeof char
。 sizeof char*
为您提供指针的大小,可能是4或8,具体取决于您的架构。
最好的方法是再次char *ptr = malloc(26 * sizeof *ptr);
这更易于维护,因为您只需要更改*ptr
的数据类型。