C语言中指向指针的指针
我希望你能帮助我 我在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)
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是的,它是。抓到了。