通过双指针转换分配的内存

标签 c pointers casting

我不清楚当你通过双指针转换分配的内存时会发生什么,如:

char **ptr;
ptr=(char *)malloc(sizeof(char)*value); 
for(i=0;i<value;i++)
   ptr[i]=(char **)malloc(sizeof(char *)*another_value);

在第一次调用 malloc 时,void * 被强制转换为 char *,因此,我可以使用 *(ptr+i) 访问它,但在第二次调用 malloc 时,我不明白为什么我需要强制转换为 void * 到 char **,将它转换为 char * 还不够吗?

最佳答案

在上面的片段中进行转换是没有意义的。 Do not cast return value of malloc .而且分配也是错误的。它应该是这样的:

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

ptr[i] = malloc(another_value); 

关于通过双指针转换分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27724166/

相关文章:

c++ - "const"声明有助于编译器 (GCC) 生成更快的代码吗?

c - 为学生 ID 和分数生成正确的输出并找到最大值和最小值?

java - Vaadin:创建 TabSheets 的 ArrayList

c++ - 动态转换还是函数重载?

c - C 中的胖指针

c - malloc 中是否需要类型转换?

c - 在 char* 中存储不同的结构?

C:运行时的编译器信息

c++ - 用子类定义类数组

c - 如何在不收到警告 `strtod` char "Assigning to ' const char *' from ' 的情况下复制 *' discards qualifier"等的功能?