将ptr传递给函数loadSignatures时遇到问题。在loadSignatures函数的末尾,virusList具有我想要的地址,但是随后它返回到具有意外地址的主地址。
void loadSignatures(char* fileName, link* virusList){
FILE* f = fopen(fileName, "rb");
virus* v = readVirus(f);
while (v){
virusList = list_append(virusList,v);
v = readVirus(f);
}
fclose(f);
}
int main(int argc, char **argv) {
link *virusList = NULL;
char fileName[30];
gets(fileName);
loadSignatures(fileName, virusList);
list_print(virusList, stdout);
list_free(virusList);
}
即使我尝试这样做:
link* loadSignatures(char* fileName, link* virusList){
FILE* f = fopen(fileName, "rb");
virus* v = readVirus(f);
while (v){
virusList = list_append(virusList,v);
v = readVirus(f);
}
fclose(f);
return virusList;
}
int main(int argc, char **argv) {
link *virusList = NULL;
char fileName[30];
gets(fileName);
virusList = loadSignatures(fileName, virusList);
list_print(virusList, stdout);
list_free(virusList);
}
它不能正常工作。
我将很高兴知道处理此问题的正确方法。
此行更改virusList的本地副本:
virusList = list_append(virusList,v);
要更改virusList,您需要传递virusList的地址。如:
void loadSignatures(char* fileName, link** virusList){
FILE* f = fopen(fileName, "rb");
virus* v = readVirus(f);
while (v){
*virusList = list_append(*virusList,v);
v = readVirus(f);
}
fclose(f);
}
并称之为:
loadSignatures(fileName, &virusList);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句