通过双指针强制分配内存

Luc*_*uca 0 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);
Run Code Online (Sandbox Code Playgroud)

在malloc的第一次调用期间,void*被转换为char*所以,我可以使用*(ptr + i)访问它,但是在malloc的第二次调用期间我不明白为什么我需要将void*转换为char**,不足以将它投射到char*?

hac*_*cks 5

在上面的片段中进行投射是没有意义的.不要转换返回值malloc.分配也是错误的.应该是这样的:

ptr = malloc(sizeof(char*)*value);  
Run Code Online (Sandbox Code Playgroud)

ptr[i] = malloc(another_value); 
Run Code Online (Sandbox Code Playgroud)

  • 我想你想把`*value`添加到第一个`malloc()`(与问题中的内容一致); 另外,值得指出的是`sizeof(char)`是多余的,因为大小是在`char`s中返回的... (2认同)
  • 只是为了100%清楚,downvoter不是我(在你的编辑后我赞成了!).我也有兴趣知道downvote的原因...... (2认同)