倒带导致分段故障
rewind causes segmentation fault
当我的程序出现分段错误时,我一直在尝试进行一些调试。我已经追踪到了需要倒带的地方。
创建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;
//-------------------------------
哪个输出:
MADE IT 1
Segmentation fault
解构者:
ISBNPrefix::~ISBNPrefix()
{
if( file != NULL )
{
fclose(file);
}
}
是文件关闭的唯一位置
编辑:经过一些故障排除,没有找到解决方案,建议我发布所有内容。由于我的声誉很低,而且我不能发布超过2个链接,所以pastebin链接在评论部分。
if(file != NULL)
cout << "ITS NOT NULL";
rewind( file );
应该是
if(file != NULL)
{
cout << "ITS NOT NULL";
rewind( file );
}
在第一个版本中,无论下一行缩进多少,只有ourput语句是有条件的。。。
我想,即使对于单个语句块,也应该始终包含方括号({}(,以避免出现这样的简单情况,这是一种很好的做法。此外,正确格式化代码,并确保缩进遵循实际的代码结构。例如:
if(file != NULL)
cout << "ITS NOT NULL";
rewind( file ); // it would have been more obvious this way
我没有看到你看到的问题,但我确实看到了一个严重的问题。在我的系统上,它会导致你的程序在退出时崩溃。也许在你的系统中,这是你问题的原因。
此代码在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] = ' ';
}
for(int i=0;i<=7;i++)
{
publisher[i] = ' ';
}
for(int i=0;i<=6;i++)
{
title[i] = ' ';
}
for(int i=0;i<=11;i++)
{
ISBNstr[i] = ' ';
}
registered = false;
}
这些环都绕了一圈太多次了。例如,在区域循环中应该是i<5
而不是i<=5
for(int i=0;i<5;i++)
{
area[i] = ' ';
}
因为这个错误,你正在破坏内存,这很容易导致你看到的问题。
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 对程序故障进行分段
- 分段故障说明
- 分段故障(核心转储)-不知道为什么
- 分段故障线程
- hiredis SET遇到分段故障
- 分段故障,合并排序算法
- 多线程程序中的分段故障和gdb回溯上的不完整信息
- 到达主C++之前分段故障
- 分段故障核心使用 IF流转储
- 使用向量的移动键盘排列(分段故障)
- 在二进制树插入和遍历期间,我得到了分段故障
- 分段故障在类之间返回整数