[在dev c ++ mingw 4.8.1中尝试从文件读取时收到分段错误

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

我正在尝试从文件中读取字符,但是当我在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;  
}

我得到输出:1,文件已打开。但是没有字符从文件中读取。Debug information

为什么会这样?

c++ dev-c++ mingw32
2个回答
0
投票

欢迎使用StackOverflow ...

首先,就像您所说的编译器非常旧。版本4.8.1,而当前的G ++版本是9.2。

尝试防止使用全局变量。这是允许的,但不是很好的封装设计。它们不是存储在堆栈或普通堆中,而是存储在内存中一些晦涩的部分。

无论如何,您没有共享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;
}

我的输出是

1
abc

即使您的原始代码读取到文件末尾,我至少也希望能有一些输出。编译器始终保持更新。也许您实际上遇到了一个旧错误...您真的应该更新


0
投票

根据您对我的评论的回答,对bool read进行除比例会覆盖read使用的fread功能。重命名它,或将其移动到另一个名称空间或类。我的编译器都无法重现相同的问题。

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