| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 784 人关注过本帖
标题:请教c++编程问题,急
只看楼主 加入收藏
palley
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-5-30
收藏
 问题点数:0 回复次数:2 
请教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 ;

}
搜索更多相关主题的帖子: include double 
2005-05-30 15:43
shan183
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2005-5-30
收藏
得分:0 

在不改变你意图的基础上,对你的程序做了修改,似乎简明一些。 #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-05-30 17:12
palley
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-5-30
收藏
得分:0 
我还发现一个问题,运行的时候我把任务管理器打开,监视其内存使用情况,发现,当N=147755616时所用的内存比当

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

楼上的兄弟说要重载new和delete运算符,具体怎么实现,能否在程序中指明一下,谢谢!
2005-05-30 21:32
快速回复:请教c++编程问题,急
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011282 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved