免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2811 | 回复: 2
打印 上一主题 下一主题

各位大虾们帮我看看为啥内存分配失败?(qt) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-09 08:08 |只看该作者 |倒序浏览
在这里内存分配失败,可是在其他的函数分配比这里还大的空间也没问题
unsigned char* volumeData = new unsigned char[uncompressedSize];

·————————————————错误提示
uncompressedSize = 315698688
terminate called after throwing an instance of 'std::bad_alloc'
  what(): std::bad_alloc

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.


·————————————————関数
int ProjectController:penProject(RzApplicationContext *app,
  QString projfolder) {
  QDir pdir(projfolder);
  QString strPFile = pdir.absoluteFilePath("RzContour.rc";
  QString strVFile = pdir.absoluteFilePath("RzVolume.rzv";
  QFile filePrj(strPFile);
  QFile fileVol(strVFile);


  //Error, Volume data is zero
  if(fileVol.size()==0)
  return -1;

  //Read VolumeData
  fileVol.open(QIODevice::ReadOnly);
  QDataStream volstream(&fileVol);
  QByteArray volCmprsdByteArray;

  int nx, ny, nz, bbp;
  int voltype;
  volstream >> nx;
  volstream >> ny;
  volstream >> nz;
  volstream >> bbp;
  volstream >> voltype;
  volstream >> volCmprsdByteArray;
  QByteArray volUncmprsdByeArray = qUncompress(volCmprsdByteArray);

  //Create New Project
  ProjectController::newProject(app);
  RzProjectContext *prjCtx = app->getProjectContext();
  RzContourContext *contourCtx =
  (RzContourContext*) prjCtx->getPluginContext("RzContourContext";

  int uncompressedSize = volUncmprsdByeArray.size();
  qDebug("uncompressedSize = %i",uncompressedSize);
  unsigned char* volumeData = new unsigned char[uncompressedSize];
  qDebug("After new uncompressedSize = %i",uncompressedSize);  

  //Create New Volume Data
  RzVolume *rzvol = new RzVolume();
  rzvol->setXSize(nx);
  rzvol->setYSize(ny);
  rzvol->setZSize(nz);
  rzvol->setBytesPerPixel(bbp);
  rzvol->setVolumeType(voltype);

   
  unsigned char* source = (unsigned char*) volUncmprsdByeArray.data();
  //memcpy()
  memcpy(volumeData, source, uncompressedSize);
  rzvol->setData(volumeData);
  rzvol->setSavedChanges(true);
  prjCtx->setVolumeData(rzvol);

  //Now load contour data using XML parser
  ProjectXMLHandler handler(contourCtx, rzvol);

  QXmlSimpleReader xmlReader;
  xmlReader.setContentHandler(&handler);
  xmlReader.setErrorHandler(&handler);

  QXmlInputSource inputSource(&filePrj);

  xmlReader.parse(inputSource);

  if(!handler.isValidRinzoFormat())
  return -1;

  prjCtx->setProjectFolder(projfolder);

  //qDebug()
  return 0;


}

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-11-09 08:46 |只看该作者
这个应该问操作系统

论坛徽章:
0
3 [报告]
发表于 2010-11-09 10:57 |只看该作者
有没有高人能解决这个问题啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP