【发布时间】:2017-03-11 13:35:14
【问题描述】:
我查看的每个其他线程都存在未将 line 初始化为 NULL 和 len 为 0 的问题。这是我的代码的一部分:
char* line = NULL;
char* line2 = NULL;
size_t len = 0;
size_t len2 = 0;
char *function = NULL;
size_t read, read2; //read2 gia to config
while ((read = getline(&line, &len, op)) != -1)
{
line[read - 2] = 0;
char* pch;
pch = strtok(line, " ");
strcpy(function, pch);
提前致谢。
【问题讨论】:
-
如果
read < 2怎么办? -
什么意思?你的意思是当你在它们的定义中编码时变量没有被初始化?你的意思是
line是NULL并且len是0在调用getline之后?你能详细说明一下吗?如果可能的话,请创建一个Minimal, Complete, and Verifiable Example 向我们展示。 -
你为什么这么肯定,getline() 是段错误的原因?你肯定没有使用调试器,否则你可能已经发现了你的错误,那么你怎么知道它不是之后的
strcpy(),它试图复制一些东西到存储在*function中的NULL指针?你的意思是function = strdup(pch);吗? -
由于您没有显示使用
line2、len2、read2的代码,也没有显示循环的其余部分,我们无法判断未显示的代码是否存在问题. MCVE (minimal reproducible example) 不会包含这些变量。 (就个人而言,如果我有两组变量,它们会是line1和line2,而不是line和line2,但是很多人都按照你的方式做——当我看到它时,我很生气。 )。但是,您还没有为function分配空间来指向,所以strcpy(function, pch)失败 - 可能是分段错误。 -
这是错误的:
strcpy(function, pch);因为function没有指向您的程序拥有的内存。 (它指向NULL,实际上是地址0;