动态分配数组时出现分段错误

时间:2014-10-02 18:11:24

标签: c dynamic-allocation

我正在编写一个函数来从我的字典文件中动态分配一个字符串数组,该字符串数据将通过命令行参数访问。我不断得到分段错误11并且无法弄清楚为什么

int
allocateArray(int count)
    {
    int i;
    char **array;
    char **argv;
    char *fileName = argv[1];
    FILE *fp = fopen(fileName, "r");
    count = countTokens(argv);
    array = malloc(sizeof(char *) * count);
    if (array == 0)
        {
        fprintf(stderr, "memory allocation failed\n");
        exit(1);
        }
    for(i = 0; i < count; i++)
        {
        array[i] = malloc(count);
        }
    for (i = 0; i < count; i ++)
        {
        fscanf (fp,"%s", array[i]);
        }
    free(array);
    fclose(fp);
    return **array;
    }

1 个答案:

答案 0 :(得分:1)

char *fileName = argv[1];中,您取消引用argv[1]。但是,它没有指向您拥有的内存位置,因为您没有在上一行char **argv;上为其分配任何内存。

您似乎对命令行参数(CLA)存在一些误解。在int main(int argc, char **argv)中,argv是一个CLA(正如您似乎已经知道的那样)。但是,当main()调用另一个函数时,CLA不会自动传递给它。

因此,在您的int allocateArray(int count)函数中,您声明的argv只是另一个局部变量。您需要明确地将argvmain()传递到allocateArray()

代码中的其他指针变量也是如此。我建议您从标准书中阅读“变量的范围和生命周期”。 (我并不是以一种居高临下的方式来表达这一点。)