读取某些文件时出现段错误,似乎与文件大小无关。

问题描述 投票:-2回答:1

因此,我正在使用C ++制作基于终端的文件管理器,并添加了读取文件的功能。这是可行的,除了某些文件之外,它始终会引发段错误。这总是在相同的文件上一致发生,但我还没有找到一种模式。我的朋友建议说这可能是换行符,但我尝试删除它们,但它们仍然触发了段错误。我调试了一下,找出是哪行引起的,然后使用valgrind创建了一个内存日志,这两个日志都将包括在内。

我知道:

  • 如前所述,这似乎不是因为尾随换行符

  • 文件大小似乎无关紧要,因为最后一次发生在2字节文件中。但是在更大的文件上也可以。
  • Valgrind output

如果您还有其他需要,随时问! :)

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 ++制作基于终端的文件管理器,并添加了读取文件的功能。除了某些文件,它可以工作...
c++ linux ncurses
1个回答
2
投票
由于ifstream构造函数出了故障,因此您唯一要输入的就是文件名

that's>”,这是我首先要查找的地方。换句话说,请在尝试使用filePath之前将其打印出来。

© www.soinside.com 2019 - 2024. All rights reserved.