指向C中的指针

时间:2016-02-08 15:53:50

标签: c pointers

我希望你能帮助我。

我在c中有一个函数,它接受一个文件,读取行的行并将每行存储为字符串。它适用于此功能

int createDownloadList(FILE **dllistref, dltask* taskList) {
    ...
    taskList = (dltask*) malloc(tasksize*allocsize);
    int num = 0;
    while(getline(&line, &linesize, *dllistref) > 0) {
        ...
        taskList[num] = task;
        num++;
        if(num%8 == 0) {
            taskList = realloc(taskList, (num+allocsize)*tasksize);
        }
    }
    return num;
}

但我想访问函数外部的taskList指针。我尝试了这个改变

int createDownloadList(FILE **dllistref, dltask** taskList) {
    size_t linesize = 256;
    char* line = (char*) malloc(linesize);
    size_t tasksize = sizeof(dltask);
    int allocsize = 8;
    *taskList = (dltask*) malloc(tasksize*allocsize);
    int num = 0;

    while(getline(&line, &linesize, *dllistref) > 0) {
        ...
        *taskList[num] = task;
        num++;
        if(num%8 == 0) {
            *taskList = realloc(taskList, (num+allocsize)*tasksize);
        }
    }
    return num;
}

但是在第三个任务之后我总是遇到分段错误而不知道原因。我希望有人可以帮助我,我无能为力,为什么它不起作用。 哦,这就是我在main方法中调用第二个函数的方法:

dltask* taskList = NULL;
numOfTasks = createDownloadList(&fileref_dllist, &taskList)

我只添加了“&”在通话中,否则它与第一个功能的呼叫相同。

1 个答案:

答案 0 :(得分:1)

*taskList = realloc(taskList, (num+allocsize)*tasksize);

必须是

*taskList = realloc(*taskList, (num+allocsize)*tasksize);

修改

@ user3121023发现的第二个错误是:

*taskList[num] = task;

应该是

(*taskList)[num] = task;