C语言中指向指针的指针

C语言中指向指针的指针,c,pointers,C,Pointers,我希望你能帮助我 我在c中有一个函数,它接受一个文件,逐行读取,并将每一行存储为字符串。它在这个函数中起作用 int createDownloadList(FILE **dllistref, dltask* taskList) { ... taskList = (dltask*) malloc(tasksize*allocsize); int num = 0; while(getline(&line, &linesize, *dllistref)

我希望你能帮助我

我在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;
}
但是我想访问函数外部的任务列表指针。我用这个零钱试过了

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)
我只在调用中添加了“&”,否则第一个函数的调用是相同的。

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

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

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

*taskList[num] = task;
那应该是

(*taskList)[num] = task;

欢迎来到Stack Overflow<代码>realloc(任务列表,(num+allocsize)*任务大小)-->
realloc(*任务列表,(num+allocsize)*任务大小)调用
realloc()
可能会失败。当它失败时,
*任务列表
将包含NULL,因此指向已分配内存的指针被覆盖、丢失。这意味着无法将指针传递到
free()
。这会导致内存泄漏。调用
realloc()
时,始终使用临时/局部变量,然后在分配给
*tasklist
变量之前检查(!=NULL)临时变量。关于参数:
dllistref
为什么要传递该指针的地址?函数没有更改该指针。因此只要传递指针,函数的签名就变成:
int-createDownloadList(FILE*dllistref,dltask**taskList)
,对它的调用变成:
int-createDownloadList(dllistref,&taskList)
谢谢您的回答。但这没什么区别。第三个元素后的相同分段错误:(@mKay我们没有你真正的代码。我看不到其他错误。
tasksize*allocsize
至少是
8
元素吗?是的,如果你愿意,我可以复制代码,但我认为不会有错,因为第一个函数工作正常,大小相同,所有内容都相同,我更改的都是任务列表的指针。但我会在我的任务中编辑它离子。@user3121023是的,它是。抓到了。