申请内存空间导致程序崩溃

xiaoyuelove2 2006-12-01 10:13:39
unsigned char buffer [512];
unsigned char IObuffer [512*2048];
unsigned char * tmpBuffer1 = buffer ;
unsigned char * tmpBuffer2 = IObuffer ;
我的IObuffer [512*2048] 申请的空间能一次性读出来吗?
比如:
hDevice = CreateFile("\\\\.\\f:",GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE)
{
MessageBox ("Failed 0!");
//return NULL;
}
if (!ReadFile ( hDevice, IObuffer, sizeof(IObuffer), &bytesread, NULL) )
{
MessageBox ("Failed 1!");
}
为什么这样 我每次运行程序就死掉了?难道是内存分配不够还是内存空间不能一次申请这么大啊?
...全文
339 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
runrunrun 2006-12-01
  • 打赏
  • 举报
回复
这么大的内存最好不要直接放在栈上,可用
unsigned char* IObuffer = new char[512*2048];
大熊猫侯佩 2006-12-01
  • 打赏
  • 举报
回复
在编译的时候手动更改提交的线程堆栈大小
vcnewer 2006-12-01
  • 打赏
  • 举报
回复
测试如下:
把楼主代码放在对话框的一个按钮事件处理中,文件名改为本人机器上一个3M 的文件,
点击按钮无反应,VC输出中有异常:stack overflow
菜单 项目->属性->链接器->System->堆栈保留大小 改为 2000000
可正常运行,跟踪 ReadFile 执行后 bytesread = 1024576
希望对楼主有所帮助
本人VC 是 VS2003
铜板 2006-12-01
  • 打赏
  • 举报
回复
你是在栈中分配空间的,在线程调unsigned char IObuffer [512*2048]; 肯定出错,因为线程默认栈大小是1M,
myfriend023 2006-12-01
  • 打赏
  • 举报
回复
读文件的时候一次读太大了 会死掉
@@鹏~~~ 2006-12-01
  • 打赏
  • 举报
回复
内存空间申请太大了,如果需要大内存的话建议使用GlobalAlloc()或CreateFileMap(),前者适用于一般情况,后者是用于较大的文件...
xiaoyuelove2 2006-12-01
  • 打赏
  • 举报
回复
这个才1M啊?内存空间能分配这么多吗?
如果不是一次性读出来我很麻烦噢
wsb_8224 2006-12-01
  • 打赏
  • 举报
回复
[512*2048] 申请的空间能一次性读出来吗???
==========================================
从来没有见过这么大的!!!!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧