以下代码仅在从命令提示符处调用时才会引发系统访问冲突异常。为什么?运行时,在fstream的第148行抛出异常。在VS中进行调试时不会发生这种情况,但仅当我尝试从命令提示符运行已编译的程序时才会发生这种情况,对于提升的命令提示符也是如此。
#include <stdafx.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <windows.h>
using namespace std;
using namespace System;
ifstream::pos_type size;
int filesize;
char * memblock;
int main() {
fstream wfile ( "C:\\Plans\\Plan.txt" , ios::out|ios::ate|ios::app);
if(wfile.is_open())
{
wfile<<"\n";
wfile.close();
}
ifstream file ( "C:\\Plans\\Plan.txt" , ios::in|ios::ate);
if (file.is_open()){
int size = file.tellg();
filesize= size;
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
cout << size << " bytes loaded into memory" << endl;
return 1;
}
else cout << "Unable to open file" << endl;
return 0;
}
答案 0 :(得分:3)
您没有创建足够大的缓冲区,因为您没有使用ios::binary
。文件中的每个'\n'
都将展开为'\r\n'
;因为您将缓冲区的大小调整为文件中的字节数,所以它无法处理扩展,并且您将获得经典的缓冲区溢出。