因此,我正在使用C ++制作基于终端的文件管理器,并添加了读取文件的功能。这是可行的,除了某些文件之外,它始终会引发段错误。这总是在相同的文件上一致发生,但我还没有找到一种模式。我的朋友建议说这可能是换行符,但我尝试删除它们,但它们仍然触发了段错误。我调试了一下,找出是哪行引起的,然后使用valgrind创建了一个内存日志,这两个日志都将包括在内。
我知道:
如果您还有其他需要,随时问! :)
void viewFile()
{
clear();
attron(A_STANDOUT);
mvaddstr(0, 0, std::string(COLS, ' ').c_str());
mvaddstr(0, 0, "File Contents:");
attroff(A_STANDOUT);
std::string filePath = getSelectedFile().c_str();
std::ifstream file(filePath); // this line throws a segfault on some files
std::string line;
int index = fileViewStart;
int lineNumber = 0;
while (std::getline(file, line))
{
lineNumber++;
if (index - fileViewScrollOffset >= fileViewStart && index - fileViewScrollOffset < fileViewEnd)
mvaddstr(index - fileViewScrollOffset, 0, (std::to_string(lineNumber) + std::string(fileViewMarginLeft, ' ') + line).c_str());
index++;
}
mvaddstr(LINES - 1, 0, "Continue [ENTER]");
isShowingOutput = true;
isViewingFile = true;
}
感谢您抽出宝贵的时间来帮助我解决这个问题。因此,我正在使用C ++制作基于终端的文件管理器,并添加了读取文件的功能。除了某些文件,它可以工作...
ifstream
构造函数出了故障,因此您唯一要输入的就是文件名that's>”,这是我首先要查找的地方。换句话说,请在尝试使用filePath
之前将其打印出来。