0

以下函数工作正常,将文本文件逐行显示到 stderr:

void load_text(std::string path){
  ifstream f(path);
  char linebuff[100];
  linebuff[99] = 0;
  while(!f.eof()){
    f.getline(linebuff, 99);
    std::cerr<<linebuff<<std::endl;
  }
  f.close();
}

现在,当 main 函数返回时,它会抛出以下访问冲突错误:

app.exe 中 0x77e58dc9 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000014。

奇怪的是,创建一个 ifstream,关闭它并返回也会引发错误

//This also crashes when returning from main
void load_text(std::string path){
  ifstream f(path);
  f.close();
}

知道为什么会这样吗?

编辑:

主函数(编译时),如果你创建一个新项目,这实际上是有效的,与实际程序的区别是很多从未调用,从未使用过的函数和类

现在我处于“无法复制”阶段:

#include <fstream>
#include <string>
#include <iostream>

//Using SDL for plotting
#ifdef WIN32
  #pragma comment(lib, "SDL")
  #pragma comment(lib, "SDLMain")
  #pragma comment(lib, "SDL_image")
#endif

int fn(std::string path){
    std::ifstream f(path);
    char linebuff[100];
    linebuff[99] = 0;
    while(!f.eof()){
      f.getline(linebuff, 99);
      std::cerr<<linebuff<<std::endl;
    }
    f.close();
    return 0;
}

int main(int argc, char** argv){
    fn("sscce.cpp");
    return 0;
}
4

1 回答 1

0

出于某种原因,告诉编译器使用编译指示使用库与在配置中显式设置它们不同。通过删除编译指示并将 .lib 文件放在链接器选项上,它可以工作。

通过以下方式找到:http ://www.gamedev.net/topic/600901-lock-file-access-violation/

于 2013-06-05T03:03:54.607 回答