【发布时间】:2015-02-21 02:12:41
【问题描述】:
我有:
while (token != NULL)
{
token = strtok(NULL," ");
array.var = realloc(array.var,(counter + 1) * sizeof(char *));
array.var[counter] = malloc(strlen(token)+1);
strcpy(array.var[counter],token);
counter++;
}
其中 var 是声明为 char **var; 的结构中的变量
当我尝试这个时,我得到一个段错误,我不知道为什么。如果取出 malloc 和 strcpy,它不会出现段错误,但我需要将令牌存储在数组中。数组由 myStruct 数组声明;
【问题讨论】:
-
我告诉你检查
malloc()没有返回NULL,因为这会导致未定义的行为,并且忽略函数返回的可能的错误代码或错误值是非常糟糕的做法,除此之外,您的代码应该可以工作。为什么你确定在这个 sn-p 中发生了 SEGMENTATION FAULT?而且,x = realloc(x, newSize);非常糟糕,因为如果realloc()返回NULL,你就会失去对x指向的有效指针的引用。 -
我认为它发生在那里是因为如果我不包含 realloc、malloc、strcpy,程序可以正常工作。我会添加错误检查,但我很确定它是 NULL,这就是它的段错误的原因
-
什么是
NULL?此外,这可能是您在填充指针数组后所做的事情。 -
您为什么不使用我在您其他帖子的答案中发布的代码?那会为你我和Jammerx2 节省很多时间,现在你应该选择他的答案,它是正确的。
-
这一行:'array.var[counter] = malloc(strlen(token)+1);'当 token 为 NULL 时将导致 seg 错误事件,因为 strlen 将尝试从地址 0 读取偏移量。如果执行超过上述行(不太可能),则此行:'strcpy(array.var[counter],令牌);'将导致段错误事件,因为 strcpy 正在尝试从地址 0 的偏移量读取
标签: c arrays pointers malloc realloc