我做了这个小代码:
void *toto = malloc(8 * sizeof(char *) * 8);
char **tata = (char **)toto;
tata[5][5] = 'a'
Run Code Online (Sandbox Code Playgroud)
但我有一个分段错误.我怎样才能将我转换void *为char **?
该malloc调用为64个未初始化内存指针分配空间.然后,您正在使用tata双间接指针.而已:
tata 指向64指针的开头.tata[5]是mallocd块的第六个元素,并且因为tata有类型char**,所以tata[5]有类型char*:带垃圾的指针.tata[5][5]是从头开始指向的第六个元素tata[5].但既然tata[5]是垃圾,tata[5][5]你的记忆空间中就是一个随机元素.