2012-09-10 62 views
-2

我正在使用Ubuntu 12.04。我一直在为简单的C++学校项目尝试一些IDE。 但是,使用codelite,anjuta和kdevelop时遇到了一个问题:当我试图读取/写入文件时,出现段错误:核心转储。在C++中使用文件时出现分段错误

我使用的是基本的来源:

#include<stdio.h> 

FILE*f=fopen("test.in","r"); 
FILE*g=fopen("test.out","w"); 

int main() { 

    int a,b; 
    fscanf(f,"%d %d",&a,&b); 
    fprintf(g,"%d\n",a+b); 

    fclose(f); 
    fclose(g); 

    return 0; 
} 

我不得不说,与标准输入/输出工作方案好。

+0

哪条线路故障? –

+4

你需要使用一个调试器,看看它的故障和原因。例如,如果fopen失败,则f或g可能为空。 – bmargulies

+0

1)使用调试器。 2)检查错误。 – 2012-09-10 15:29:49

回答

2

最有可能的问题是,要fopen的呼叫没有成功,也许是因为你的程序是不是从包含该文件相同的目录中运行。在这种情况下,指针fg将为空,并且在将它们传递给任何C库函数之前,您必须检查该指针。

您还需要检查fscanf是否成功,否则使用ab将导致不确定的行为(尽管这将最有可能只是导致程序输出的垃圾,而不是崩溃)。

你可能会使用从C++库std::fstream更好;但即使如此,您仍然需要检查文件流是否已打开并且输入是否成功读取。

相关问题