我正在编写一个函数来从我的字典文件中动态分配一个字符串数组,该字符串数据将通过命令行参数访问。我不断得到分段错误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;
}
答案 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
只是另一个局部变量。您需要明确地将argv
从main()
传递到allocateArray()
。
代码中的其他指针变量也是如此。我建议您从标准书中阅读“变量的范围和生命周期”。 (我并不是以一种居高临下的方式来表达这一点。)