以编译形式引发系统访问冲突但在VS2010中没有,为什么?

时间:2012-01-26 21:49:57

标签: c++ visual-studio-2010

以下代码仅在从命令提示符处调用时才会引发系统访问冲突异常。为什么?运行时,在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;
}

1 个答案:

答案 0 :(得分:3)

您没有创建足够大的缓冲区,因为您没有使用ios::binary。文件中的每个'\n'都将展开为'\r\n';因为您将缓冲区的大小调整为文件中的字节数,所以它无法处理扩展,并且您将获得经典的缓冲区溢出。