找回密码
 注册
Simdroid-非首页
查看: 181|回复: 3

[2. C/C++/C#] 请教C++ 编程问题,急

[复制链接]
发表于 2005-5-30 12:14:07 | 显示全部楼层 |阅读模式 来自 湖北武汉
大家看看下面这段程序,我分别让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-31 13:08:13 | 显示全部楼层 来自 美国

Re:请教C++ 编程问题,急

Simdroid开发平台
你的机器int字长是多少?如果是32位。那么上限就是2的31次方。 你给的数值就溢出了。改成long Nwk就好了。
 楼主| 发表于 2005-5-31 16:58:52 | 显示全部楼层 来自 湖北武汉

Re:请教C++ 编程问题,急

2的31次方是 2147483648

数值没有溢出
发表于 2005-6-3 18:06:20 | 显示全部楼层 来自 上海卢湾区

Re:请教C++ 编程问题,急

咦,我在Redhat下试了一下,三个都是Aborted。再说了,你分配这么多数量的double数组,好象多达数G的内存块咯,搞不懂你的第一个和第三个是如何成功的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 01:35 , Processed in 0.051144 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表