fclose 导致分段错误?

Nik*_*hil 2 c linux

下面是源代码的一小部分fclose导致错误的地方?此函数并不总是被调用,在某些特定条件下会调用此函数。

int write_into_file (char * file_name)
{       
    FILE * fp = NULL ;

    if (file_name == NULL)
    {   
        return FAIL ; 
    }   

    if ((fp = fopen (file_name , "r")) == NULL)
    {   
        if ((fp = fopen (file_name, "w")) == NULL)
        {
            return FAIL ;
        }
    }
    fclose (fp) ;
    fp = NULL ;

    return SUCESS;

}
Run Code Online (Sandbox Code Playgroud)

我们将大小为 1024 的字符缓冲区传递给 file_name。请谁能告诉我为什么 fclose 会导致分段错误?

orl*_*rlp 5

我认为这里没有可能fclose导致段错误的可能方法,我认为您的问题出在程序的其他地方。

堆栈可能在其他地方损坏,并且该错误在fclose被调用时显示。我建议您再次查看您的其他源代码,并使用调试器/内存分析器仔细查看会发生什么。

我能看到的唯一可能导致错误的另一件事file_name不是以空值结尾。