C 动态分配数组时的分段错误
我正在编写一个函数,从字典文件中动态分配一个字符串数组,该数组将通过命令行参数访问。我不断地遇到分段错误11,不知道为什么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
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统计作为命令行参数传递的字典文件中的字符串/标记的数量