我得到的是:
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/