[英]Receiving segmentation fault when trying to read from file in dev c++ mingw 4.8.1
我正在尝试从文件中读取字符,但是当我在 main 外部声明变量时收到分段错误。 如果我删除它们并尝试从文件中读取,一切都会顺利进行。 我正在使用 dev c++ 5.7.1 和 mingw 4.8.1 便携版。
我已将问题隔离为仅声明了一些变量和文件读取代码。 这段代码来自我正在尝试开发的一个更大的应用程序(我正在自学游戏开发)。
#include <iostream>
#include <fstream>
bool running = true;
bool musicPlaying = true;
bool read = false;
int levelNumber;
int barWidth = 40;
int barHeight = 10;
float timeElapsed;
int main(int argc, char** argv) {
std::ifstream file;
file.open("test.txt");
std::cout<<file.is_open()<<std::endl;
char c;
while(!file.eof()){
file.get(c);
std::cout<<c;
}
return 0;
}
我得到 output: 1,文件已打开。 但是没有从文件中读取字符。 调试信息
为什么会这样?
根据您对我的评论的回答,声明bool read
覆盖read
fread
使用的 function 。 重命名它或将其移动到另一个命名空间或 class。
我的编译器都不能重现同样的问题。 这是非常奇怪的行为,因为至少“读取”的声明应该与正确覆盖的原始声明相同。 也许您的stdlib以不同的方式调用 read 。
欢迎来到 StackOverflow...
首先,就像说你的编译器很旧。 版本 4.8.1,而当前 G++ 是版本 9.2。
尽量避免使用全局变量。 这是允许的,但不是很好的封装设计。 它们不存储在堆栈或普通堆中,而是存储在 memory 的某个不起眼的部分中。
无论如何,你没有分享 test.txt,所以我自己制作了包含
acb
并清理了你的代码
#include <iostream>
#include <fstream>
int main() {
std::ifstream file;
file.open("test.txt");
std::cout << file.is_open() << '\n';
char c;
while (file >> c) std::cout << c;
}
而我的 output 是
1
abc
即使您的原始代码读取到文件末尾,我真的希望至少有一些 output。 编译器一直在更新。 也许您实际上遇到了一个旧错误...您真的应该更新
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.