C 阵列上的分段故障

C 阵列上的分段故障,c,arrays,pointers,C,Arrays,Pointers,以下是我得到的: 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)); 但

以下是我得到的:

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";


你到底想做什么?似乎
char**tokens
将是解决您问题的更好方法

在这一刻,当你在做

 *tokens=(char**)malloc((5)*sizeof(char*));
您正在未初始化的变量标记指向的未分配内存区域中写入。如果它随后崩溃,那么它或多或少是随机的

我的想法是,我有一个指针,指向一个数组,每个数组的集合 数组指向一个字符串,因此我可以执行如下操作:

*tokens[0]="string";
*令牌[0]=“字符串”

您认为该变量也将指向哪个内存区域?
我建议您阅读,这解释了为什么
(*tokens[0])[m]='s'将是非法的。

您还应该了解诸如
strcpy
之类的命令。

什么是令牌变量定义?代码无法编译。另外,显示
标记的声明
,并显示一些相关的代码。如何直接插入
*标记
标记
:取消初始化。并且应该是
(*tokens)[4]=(char*)malloc((4)*sizeof(char))