C - 初始化指针数组

时间:2013-11-10 19:52:19

标签: c arrays pointers

我正在尝试初始化一个指针数组但是当我尝试在主要打印它时它不起作用,它显示了一个分段错误,但是如果我尝试用相同的方法打印它就打印

这是我的代码

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;
}
}

1 个答案:

答案 0 :(得分:1)

您永远不会在任何地方为listOfFiles成员分配空间。这意味着这个数组本质上是零大小,所以写入其中的任何条目都将超出范围。

如果希望dependencies成为全局变量,则必须为listOfFiles数组设置固定大小,或者使其成为指向指针的指针,并在需要时分配/重新分配。

此外,在将指针name分配给数组之后,然后free这个已分配的内存,这意味着现在数组中的指针指向自由内存。