内存映射读入文件偶尔报错,原因不明求大神解救

这个问题困扰我一个多月了,球球大佬们赏光帮我看看吧。
这个程序的目的是读入Fluent的计算结果和网格到内存,一开始用的文件流,我嫌太慢就看到晚上说可以用内存映射。
现在的问题是内存映射的代码偶尔会报错,我自己找了很久最后定位到如下代码:

#include <afx.h>
#Include <string>
#Include <vector>
#Include <iostream>
using namespace std;

//从网上找的 string 2 LPCWSTR 类型转换
LPCWSTR stringtoLPCWSTR(string orig)
{
    size_t origsize = orig.length() + 1;
    size_t convertedChars = 0;
    wchar_t *wcstring = (wchar_t *)malloc(sizeof(wchar_t)*orig.size() - 1);
    mbstowcs_s(&convertedChars,wcstring,origsize,orig.c_str(),_TRUNCATE);
    return wcstring;

}

void main()
{
    HANDLE fileHandle = NULL, fileMapHandle = NULL;
    LPCWSTR = nameString = stringtoLPCWSTR("grid\\NACA0012.cas");

    //创建文件对象,从网上学的
    fileHandle = CreateFile(nameString,
                            GENERIC_READ,
                            0,
                            0,
                            OPEN_EXISTING,
                            FILE_ATTRIBUTE_READONTLY,
                            NULL);
    if(fileHandle  == INVALID_HANDLE_VALUE)
        {
            //报错
        }

    //触发内存冲突的代码
    //这段代码经过简化,大概的内容和变量是一致的
    //并且省略了一些已经排除没有问题的语句
    //!最终找到的,会触发内存泄漏的位置就在创建文件对象之后

    //记录想要找到的内容所在文本行数
    vector<int> lineRecorder;
    //从文本中获取每行的内容,这里用固定的字符串代替了
    string currentLine = "asdasdasdasdasdasdasd";
    //用循环模拟读入文本的过程
    for(int i=0;i<100;i++)
    {
        //if(一些判断)
        //此处省略判断

        //引发内存冲突的位置
        //如果出现内存冲突,循环通常都运行到第 9 次,即下面的cout输出 8/100
        lineRecorder.push_back(i);

        cout<<i<<" / "<<100<<'\r';
    }
    getchar();
}   

    //后面的也省略了

}

报错信息:
事件名称:APPCRASH
故障模块:ntdll.dll
异常代码:c0000005
异常偏移:000000000002a1c5

球大佬们捞一下,看有没有解决办法,已经挂悬赏了,提前谢谢大家赏光!

是不是内存不足,或者文件锁定,或者文件不存在(因为你指定了OPEN_EXISTING)

看上去跟文件大小、内存使用有关。有两个关键点没有讲清楚:1.文件多大。2.读入之后是否占用大量内存,如果是,现在的内存表达方式是什么。