[新人,多谢大家]怎么解决0xC0000005错误

[新人求助,谢谢大家]如何解决0xC0000005异常?
本帖最后由 u014036767 于 2015-05-04 17:01:46 编辑
使用虚拟分配以获得512MB虚拟内存,测试是否可以向虚拟内存写入0

代码段如下:

    printf("Allocated 512M Virtual Memory Space.\n"); //使用虚拟分配以获得虚拟512MB块
LPVOID pBlock3 = VirtualAlloc(
NULL, // 不指定起始地址
1 << 29, // 要求512MB
MEM_RESERVE, // 不调配物理存储
PAGE_READWRITE); // 对此的读写操作

/*尝试向刚申请的内存空间内写入0*/
if (ZeroMemory(pBlock3, 1 << 29)){
printf("Memory zeroed.\n");
}
else{
printf("Could not zero memory.\n");
}

因为不能向虚拟内存写入0,所以应该是printf("Could not zero memory.\n");
可是调试的时候出现“未经处理的异常0xC0000005:  写入位置 0x013C0000 时发生访问冲突”

    cout << "Allocated 512M Virtual Memory Space." << endl; //使用虚拟分配以获得虚拟512MB块
LPVOID pBlock3 = VirtualAlloc(
NULL, // 不指定起始地址
1 << 29, // 要求512MB
MEM_RESERVE, // 不调配物理存储
PAGE_READWRITE); // 对此的读写操作

/*尝试向刚申请的内存空间内写入0*/
if (SecureZeroMemory(pBlock3, 1 << 29)){
cout << "Memory zeroed." << endl;
}
else{
cout<<"Could not zero memory."<<endl;
}

C++代码也是一样,可以用try...catch解决吗?catch什么异常呢?

    /*尝试向刚申请的内存空间内写入0*/
try{
SecureZeroMemory(pBlock2, 1 << 27);
cout << "Memory zeroed." << endl;
}
catch (){
cout << "Could not zero memory." << endl;
}

------解决思路----------------------
MEM_RESERVE申请后没有提交,应该加上mem_commit
------解决思路----------------------
推荐使用api判断,当然非要捕获异常也是可以的。
引用
IsBadWritePtr


	cout << "Allocated 512M Virtual Memory Space." << endl;                //使用虚拟分配以获得虚拟512MB块
LPVOID pBlock3 = VirtualAlloc(
                     NULL,                                                        // 不指定起始地址
                     1 << 29,                                                    // 要求512MB
                     MEM_RESERVE,                                                // 不调配物理存储
                     PAGE_READWRITE);                                            // 对此的读写操作


if (pBlock3 != NULL && !IsBadWritePtr(pBlock3, 1 << 29) && (SecureZeroMemory(pBlock3, 1 << 29)))
{
cout << "Memory zeroed." << endl;
}
else
{
cout << "Could not zero memory." << endl;
}