我在一个加密程序中使用new和delete操作内存,该程序表现非常不稳定,有时候可以正常结束,有时运行到一半就崩溃了。经过调试发现使用new时,抛出了std::bad_alloc这个异常,返回值也为NULL,分配内存失败……请问:有没有什麽办法可以分配一大块内存,例如那些多媒体程序是如何做到的?或者如何调整堆的大小? 我试过/F和/HEAP,但是编译的时候报错,可否给一个详细的例子?

解决方案 »

  1.   

    比一定非要是new操作,换成其他 Windows API 也可以,各位给点意见 ^^
      

  2.   

    汗,你new的多大啊,出现new不到的情况很少的,除非你的内存已经耗尽了,
      

  3.   

    HeapAlloc
    VirtualAlloc
    文件内存映射FileMapping顺便问,要申请多大内存?
      

  4.   

    用API试试,失败就GetLastError看看是啥错误
      

  5.   


    嘿嘿……我在使用RSA,
    128bits的密钥,没有任何异常
    256bits的密钥,提示CRT detected that the application wrote memory after end of heap buffer.
    512bits的密钥,直接是显示rsa.exe停止工作……
      

  6.   

    256 bits
    end of heap buffer?
    这个我不解了
    坐等高手吧
      

  7.   

    你有没有算过new的对象占用空间是多大的啊,大的话就用虚拟内存哈
      

  8.   

    我修改了程序后,使用了HeapCreate创建了了一个15MB的堆,还是不够用……晕……HeapAlloc函数 与 new 在相同的位置出错,GtLastError = 8(系统内存不足)
    没有,因为还有一个crypt.dll,内部的内存使用我没法统计……
      

  9.   

    用new就可以,new不出来别的也够呛。15M绝对不会出问题,150M都不应该出内存不足。检查一下你new的对象的大小吧,是不是大小出错了还是没有初始化。
      

  10.   

    我的new都是使用立即数作参数,没有使用变量,调用的是DLL也是openSSL应该没问题,找了半天也没找到那个地方了……最可笑的是,程序单独运行,10次当中有9次是错的,
    而如果使用vc调试,程序往往可以正常结束,没有任何错误……
      

  11.   


    一次映射到地址空间,其实也不是很大量的数据用RSA交换DES密钥,并使用MD5和RSA签名 ……我已经推倒重来了,新程序没有任何问题,郁闷……