阵列上的分段错误

时间:2014-04-16 09:29:27

标签: c arrays pointers

这是我得到的:

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

我得到了#34;程序收到信号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';

1 个答案:

答案 0 :(得分:2)

你想要做什么?似乎char **tokens可以更好地解决您的问题。

在这一刻,当你做的时候

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

您正在写入未初始化的变量标记指向的未分配的内存区域。如果它之后崩溃,那么它或多或少是随机的。

  

我的想法是我有一个指向数组的指针,每组都有   数组指向一个字符串,所以我可以这样做:

     

*tokens[0]="string";

您认为该变量指向的内存区域是什么? 我建议你阅读Pointer to const string in C,这解释了为什么(*tokens[0])[m]='s';是非法的。 您还应该了解strcpy之类的命令。