C 动态分配数组时的分段错误

C 动态分配数组时的分段错误,c,dynamic-allocation,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

我正在编写一个函数,从字典文件中动态分配一个字符串数组,该数组将通过命令行参数访问。我不断地遇到分段错误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;
    }
int
分配器阵列(整数计数)
{
int i;
字符**数组;
字符**argv;
char*fileName=argv[1];
FILE*fp=fopen(文件名,“r”);
count=countTokens(argv);
数组=malloc(sizeof(char*)*count);
if(数组==0)
{
fprintf(stderr,“内存分配失败\n”);
出口(1);
}
对于(i=0;i
char*fileName=argv[1]中,您取消了对argv[1]
的引用。但是,它没有指向您拥有的内存位置,因为您在前一行
char**argv

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

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


代码中的其他指针变量也是如此。我建议您阅读一本标准书中的“变量的范围和生存期”。(我的意思不是居高临下。)

除了Happy的答案外,countTokens如何处理argv?countTokens统计作为命令行参数传递的字典文件中的字符串/标记的数量