我希望你能帮助我。
我在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)
我只添加了“&”在通话中,否则它与第一个功能的呼叫相同。
答案 0 :(得分:1)
行
*taskList = realloc(taskList, (num+allocsize)*tasksize);
必须是
*taskList = realloc(*taskList, (num+allocsize)*tasksize);
修改强>
@ user3121023发现的第二个错误是:
*taskList[num] = task;
应该是
(*taskList)[num] = task;