下面的一段代码在为最后一个 arg 分配内存时给出了一个段错误。我究竟做错了什么?谢谢。
int n_args = 0, i = 0;
while (line[i] != '\0')
{
if (isspace(line[i++]))
n_args++;
}
for (i = 0; i < n_args; i++)
command = malloc (n_args * sizeof(char*));
char* arg = NULL;
arg = strtok(line, " \n");
while (arg != NULL)
{
arg = strtok(NULL, " \n");
command[i] = malloc ( (strlen(arg)+1) * sizeof(char) );
strcpy(command[i], arg);
i++;
}
谢谢。
最佳答案
在 for
循环之后,您没有重置 i
的值,因此 i
等于 n_args
当你到达底部时。此时尝试访问 command[i]
会访问未初始化的内存和段错误。
这里真正的教训是不要在没有充分理由的情况下以这种方式重用变量。如果您在中间的 for
循环中使用 i
以外的东西,您的代码将更健壮且更易于阅读。
关于c - 将数组的内存分配给 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907389/