c - 将数组的内存分配给 char 指针

标签 c pointers multidimensional-array memory-management

下面的一段代码在为最后一个 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/

相关文章:

java - 在Java中对多维字符数组进行排序

找不到有效引用

C++用取消引用的指针填充数组

C++ 从链表中删除

c++ - 当我将它添加到指针时,我可以安全地忽略溢出检查的最小偏移量是多少?

java - 使用字符串数组在 Java 中创建二维( map )数组

python - 将 3 维 numpy 数组传递给 C

c++ - 你知道学习运算符优先级和结合性的心理装置或技巧吗?

c - C程序中的整数提升

python - NumPy Stack 多维数组