我得到的是:

char ***tokens;
*tokens=(char**)malloc((5)*sizeof(char*));
*tokens[4]=(char*)malloc((4)*sizeof(char));

在第三行我得到了“程序接收信号SIGSEGV,分段故障”。
问题是,这没关系:
*tokens[0]=(char*)malloc((4)*sizeof(char));

这也没关系:
*tokens[1]=(char*)malloc((4)*sizeof(char));

但这给了我分割错误:
*tokens[2]=(char*)malloc((4)*sizeof(char));

或者任何大于2的数字,为什么数组的长度应该是5?
其思想是我有一个指向数组的指针,每组数组指向一个字符串,所以我可以这样做:
*tokens[0]="string";

以及
(*tokens[0])[m]='s';

最佳答案

你到底想干什么?看来char **tokens是解决你问题的更好办法。
在这一刻,当你

 *tokens=(char**)malloc((5)*sizeof(char*));

您正在未初始化的变量标记所指向的未分配内存区域中写入。当它在之后崩溃时,它或多或少是随机的。
其思想是我有一个指向数组的指针,每组
数组指向一个字符串,所以我可以这样做:
*tokens[0]="string";
你认为那个变量也会指向哪个内存区域?
我建议您阅读Pointer to const string in C,这解释了为什么(*tokens[0])[m]='s';是非法的。
您还应该了解strcpy等命令。

关于c - 阵列分割错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23105299/

10-11 20:48