C++ 倒带导致分段错误

C++ 倒带导致分段错误,c++,C++,当我的程序出现分段错误时,我一直在尝试进行一些调试。我找到了叫倒带的地方 创建ISBNPrefix对象时打开该文件 ISBNPrefix::ISBNPrefix(const char* filename) { file = fopen( filename, "r" ); } 文件是ISBNPrefix类的成员: class ISBNPrefix { FILE* file; public: ISBNPrefix(const char* filename); bool

当我的程序出现分段错误时,我一直在尝试进行一些调试。我找到了叫倒带的地方

创建ISBNPrefix对象时打开该文件

ISBNPrefix::ISBNPrefix(const char* filename) 
{

   file = fopen( filename, "r" );

}
文件是ISBNPrefix类的成员:

class ISBNPrefix {
FILE* file;
public:
    ISBNPrefix(const char* filename);
    bool isRegistered(int area) const;
    int minNoDigits(int area) const;
    bool isRegistered(int area, const char* publisher) const;
    ~ISBNPrefix();
};
创建ISBNPrefix对象的行是:

ISBNPrefix prefixList("prefixRanges.txt");
prefixRanges.txt是我的目录中的文件名

现在,我发现这个部分出现了分段错误:

//-------------------------------
cout << "MADE IT 1" << endl;
//-------------------------------
   rewind( file );
//-------------------------------
cout << "MADE IT 2" << endl;
//-------------------------------
解构主义者:

ISBNPrefix::~ISBNPrefix()
{
   if( file != NULL )
   {
      fclose(file);
   }
}
是文件关闭的唯一位置

编辑:经过一些故障排除,没有找到解决方案,建议我发布所有内容。由于我的声誉很低,我不能发布超过2个链接,因此pastebin链接位于评论部分。

if(file!=NULL)
if(file != NULL)
cout << "ITS NOT NULL";
   rewind( file );

我看不出你看到的问题,但我确实看到了一个严重的问题。在我的系统上,它会导致程序在退出时崩溃。也许在你的系统中,这是你问题的原因

此代码位于ISBN标题中

class ISBN{
        char area[5];
        char publisher[7];
        char title[6];
        bool registered;
        char ISBNstr[11];
        bool isRegistered(const ISBNPrefix& list);
这段代码在ISBN构造函数中

ISBN::ISBN()
{
   for(int i=0;i<=5;i++)
   {
   area[i] = '\0';
   }

   for(int i=0;i<=7;i++)
   {
   publisher[i] = '\0';
   }

   for(int i=0;i<=6;i++)
   {
   title[i] = '\0';
   }

   for(int i=0;i<=11;i++)
   {
   ISBNstr[i] = '\0';
   }
   registered = false;
}
ISBN::ISBN()
{

对于(int i=0;iAdd
我在你的
ISBNPrefix
类中没有看到复制构造函数或赋值运算符,但我看到了析构函数。这是我对问题的第一个猜测。特别是如果析构函数关闭了文件,那么你就有问题了,这可能解释了你看到的segfault。发布你的
倒带代码(如果可能)。@Tushar
revend
是标准的C函数(或者宏函数)@user2177874一切都指向它是一个复制构造函数/赋值运算符/析构函数问题。你是否关闭析构函数中的文件?如果是这样,那么放入
cout没有帮助,输出仍然给出一个分段错误hmm我不认为这能解决他的问题,因为
它不是NULL
被打印出来了我想你是对的g轨道。代码只是为了调试。期望文件不会为空。我猜该文件已经关闭,但OP没有意识到。嗯。你有很多优点,但是,代码在我看来有点坏。好吧,我想这解决了它,我还有其他问题,但至少没有给SEGFULTS,非常感谢!
if(file != NULL)
    cout << "ITS NOT NULL";
rewind( file );  // it would have been more obvious this way
class ISBN{
        char area[5];
        char publisher[7];
        char title[6];
        bool registered;
        char ISBNstr[11];
        bool isRegistered(const ISBNPrefix& list);
ISBN::ISBN()
{
   for(int i=0;i<=5;i++)
   {
   area[i] = '\0';
   }

   for(int i=0;i<=7;i++)
   {
   publisher[i] = '\0';
   }

   for(int i=0;i<=6;i++)
   {
   title[i] = '\0';
   }

   for(int i=0;i<=11;i++)
   {
   ISBNstr[i] = '\0';
   }
   registered = false;
}
   for(int i=0;i<5;i++)
   {
   area[i] = '\0';
   }