2013-03-27 47 views
0
我有我的下面的C代码的麻烦

段错误 - FCLOSE /的fopen

int main(void){ 

    FILE* infile = fopen("file","r); 
    FILE* fp = NULL; 

    unsigned char* buffer = malloc(512); 

    while(fread(buffer,512,1,infile) > 0){ //reading a file block by block 

      if(buffer[0] == 0xff){ 
       ... //defining variable "name" 
       if(fp != NULL)fclose(fp); 
       fp = fopen(name,"w+"); 
       fwrite(buffer,512,1,fp); 
      } else if(fp != NULL) { 
        fwrite(buffer,512,1,fp); 
      } 

    } 

} 

看来我不能FCLOSE使用相同的指针,为什么在fopen?我需要我的指针在主体中的任何地方都可以访问,所以我不能在我的时候声明一个新的。

编辑:哦,上帝​​,问题就迎刃而解了。我可能超级累了。我正在编译错误的文件。反正...

谢谢你,伙计!

+5

您不是'使用'相同的指针那里。你只是捕获一个返回值。段错误是由您未在此发布的代码引起的。 – 2013-03-27 00:26:28

+0

我知道这很奇怪,但是如果我没有用flose(fp)释放内存,sgefault不会再出现。 – superzamp 2013-03-27 00:32:18

+1

请构建重建问题的最小完整程序。 – 2013-03-27 00:32:51

回答

1

很难知道为什么,因为你没有向我们展示所有的代码。但是,重新打开该文件应该非常简单:

#include <stdio.h> 

int main(void) 
{ 
    FILE* fp = NULL; 
    char name[] = "somefile"; 

    for (;;) 
    { 
    // do something 
    if ((fp = fopen(name, "w+")) == NULL) 
     break; 
    // do something with the file 
    fclose(fp); 
    // do something 
    } 

    return 0; 
} 
+0

如果'fopen()'返回NULL,那么你有一个错误 - 可能不应该从循环中断开。 – 2013-03-27 00:51:19

+0

@DietrichEpp True。我只是表明,单纯的重新开放很简单。 – 2013-03-27 01:12:40