【发布时间】:2020-07-27 14:40:16
【问题描述】:
我已经定义了一个结构和一个返回指向该结构的指针的函数,每当我尝试调用它时,我都会收到运行时错误:** error: conflicting types for ‘readVirus’**
typedef struct virus {
unsigned short SigSize;
char virusName[16];
unsigned char* sig;
}virus;
virus* readVirus(FILE* file){
virus *res;
res=(virus*)malloc(sizeof(virus));
fread(&res->SigSize,2,1,file);
fread(&res->virusName,16,1,file);
res->sig=(char*)malloc(res->SigSize);
fread(res->sig,res->SigSize,1,file);
return res;
free(res);
}
int main(int argc, char **argv) {
FILE *input;
input = fopen(argv[1],"rb");
virus *res;
res=(virus*)malloc(sizeof(virus));
res=readVirus(input);
printf("%s",res->virusName);
free(res);
fclose(input);
}
我尝试将 readVirus 的主体直接复制到 main 并删除该函数并且它运行良好,所以我认为它不是函数实现问题。 在此先感谢:)
【问题讨论】:
-
完整的错误信息是什么?它应该告诉您冲突的类型实际上是什么。
-
另外,
res=(virus*)malloc(sizeof(virus)); res=readVirus(input);是内存泄漏。 -
virusDetector.c:在顶层:virusDetector.c:31:8:错误:'readVirus' 病毒的类型冲突* readVirus(FILE* file){ ^~~~~~~~~~ virusDetector.c:26:9: 注意: 'readVirus' 的先前隐式声明在这里 res=readVirus(input); ^~~~~~~~~
-
使用 struct virus 而不是 virus,或添加 typedef
-
⟼请记住,尤其是在 Stack Overflow 上学习和提问时,尽可能让代码保持井井有条是很重要的。 Consistent indentation 有助于传达结构,更重要的是,有助于传达意图,这有助于我们快速找到问题的根源,而无需花费大量时间尝试解码正在发生的事情。
标签: c function file pointers types