我正在尝试初始化一个指针数组,但是当我尝试在主函数中打印它时,它不起作用,它显示段错误,但如果我尝试以与打印相同的方法打印它
这是我的代码
typedef struct File
{
char fileName[Max_FILE_NAME_LENGTH];
char *listOfFiles[];
}File;
File dependencies[MAXIMUM_FILES];
void findListOfFiles(char *line, int i, int currDepend)
{
int idx=0,numOfFiles=0;;
while(line[i]!='\n')
{
char *name=(char *)malloc(65*sizeof(char));
while(line[i]!=',' && line[i]!='\n')
{
name[idx]=line[i];
i++;
idx++;
}
name[idx]='\0';
dependencies[currDepend].listOfFiles[numOfFiles]=name;
printf("%s+", dependencies[currDepend].listOfFiles[numOfFiles]);
if(line[i]=='\n')
{
if(name){
free(name);
name=NULL;
}
break;
}
if(name){
free(name);
name=NULL;
}
numOfFiles++;
i++;
idx=0;
}
}
最佳答案
您实际上从未在任何地方为 listOfFiles
成员分配空间。这意味着该数组的大小本质上为零,因此对其中任何条目的所有写入都将超出范围。
如果您希望dependency
成为全局变量,则必须为listOfFiles
数组设置固定大小,或者将其设置为指针到指针并需要时分配/重新分配。
此外,在将指针name
分配给数组后,您就可以释放
这个分配的内存,这意味着数组中的指针现在指向已释放的内存。
关于C - 初始化指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894340/