c - 数组段错误

标签 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));

但这给了我段错误:

*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/

相关文章:

c - 学习如何使用 GNU Autotools 打包我的程序时遇到问题

c - 数字后面的 'u'是什么意思?

java - 埃拉托色尼筛素数程序

java - 将有序遍历元素发送到数组

python - 读取 .VTK 多数据文件并将其转换为 Numpy 数组

C 为什么 void 指针不能存储浮点值?

c - 如何使用c中定义的double打印 'space character'?

c - 在 C 中使用标准函数名称

c - 确定缓冲区的总大小(以字节为单位)

C++关于使用的指针