| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 315 人关注过本帖
标题:请教c++编程问题,急
收藏  订阅  推荐  打印 
palley
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2005-5-30
请教c++编程问题,急

大家看看下面这段程序,我分别让Nwk等于三个不同的值,但是却出现这样的怪事,
当 Nwk = 147755616 时,内存可以分配成功;
当 Nwk = 347755616 时,内存无法分配成功;
当 Nwk = 631812378 时,内存又可以分配成功;

请问这是怎么回事,这段代码可以直接编译,没什么错误,大家可以试一下
我对内存管理不是很熟,忘各位高手指教,谢谢!

#include <stdio.h>
#include <math.h>
#include <fstream.h>
#include <string.h>
#include <time.h>
#include "stdlib.h"

void main( void )
{
  double *Gk ;
  int Nwk ;

  Nwk = 147755616 ;
  Nwk = 347755616 ;
  Nwk = 631812378 ;
  Gk = new double[Nwk] ;

  if ( Gk==0)
  {
    printf("Error!!!\n") ;
    exit(0) ;
  }
  else
  {
    printf("ok!!!!!\n") ;
  }

delete []Gk ;

}
2005-5-30 15:43
shan183
Rank: 2
等级:注册会员
帖子:60
积分:700
注册:2005-5-30

在不改变你意图的基础上,对你的程序做了修改,似乎简明一些。 #include <iostream>

using namespace std;

//const int N=147755616; //const int N=347755616; const int N=631812378;

int main() { double *G; G=new double[N];

if (G==0) { cout<<"Error!"<<endl; return -1; } else { cout<<"ok!"<<endl; delete [] G; }

return 0; } new动态分配内存是寻找满足要求的连续的内存块,当常量N过大时就会发生error,因为虽然可能你的内存还有,但是都是碎片,找不到足够大的内存块,并且N=147755616时,我的调试结果是“Error!”,所以我认为这和计算机的内存大小和内存使用情况有关!通过重载new和delete运算符,也许可以解决你的问题。

2005-5-30 17:12
palley
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2005-5-30

我还发现一个问题,运行的时候我把任务管理器打开,监视其内存使用情况,发现,当N=147755616时所用的内存比当

N=631812378时使用的内存还要大。

楼上的兄弟说要重载new和delete运算符,具体怎么实现,能否在程序中指明一下,谢谢!
2005-5-30 21:32
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.060565 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved