这是我得到的:
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*));
您正在写入由未初始化变量标记指向的未分配内存区域。之后崩溃的地方或多或少是随机的。
The idea is that I have a pointer that points to an array, each set of the array points to a string, so I can do something like this:
*tokens[0]="string";
您认为该变量也会指向哪个内存区域?
我建议你阅读 Pointer to const string in C ,这解释了为什么 (*tokens[0])[m]='s';
是非法的。
您还应该了解 strcpy
等命令。
关于c - 数组段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23105299/