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))代码>