new[] 和直接定义数组,内存溢出问题请教

ycfeng 2012-02-15 09:55:55
如下列代码,执行Button1Click不会溢出,而执行Button2Click会内存溢出,奇怪了,开辟的内存空间是一定大的,望各位大侠指教!
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
double *p;
p=new double(1000*1000*200);
// Edit1->Text=sizeof(p);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
double PP[1000][1000][200];
//Edit1->Text=sizeof(PP);
}
//--------------------------------------------------------------------------
...全文
210 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken_scott 2012-02-16
  • 打赏
  • 举报
回复
double * p = new double(1000*1000*200);
这里只申请了sizeof(double)个字节大小(应该是8), 并且*p=1000*1000*200(将p指向的内存初始化为后面那个值), 释放代码为 delete p;

如果要申请1000*1000*200*sizeof(double)个字节大小, 方法为double * p = new double[1000*1000*200]; 释放代码为 delete [] p;
ycfeng 2012-02-15
  • 打赏
  • 举报
回复
非常感谢各位指教!给分了
ycfeng 2012-02-15
  • 打赏
  • 举报
回复
多谢各位,那么下面如何解释
double(1000*1000*200);
上面的内存占用空间大小=8*1000*1000*200/1024/1024=1525M,好像不对啊!
执行
double *p;
p=new double(1000*1000*200);
语句后,计算机内存基本没有减少多少,搞不懂了,还望指教!!

andy1658 2012-02-15
  • 打赏
  • 举报
回复
一楼正解,楼主可以去查查不同类型的变量申请内存,内存存放的地点、全局变量和局部变量存储类别
ycfeng 2012-02-15
  • 打赏
  • 举报
回复
double(1000*1000*200);
上面的内存占用空间大小=8*1000*1000*200/1024/1024=1525M,好像不对啊!
执行
double *p;
p=new double(1000*1000*200);
语句后,计算机内存基本没有减少多少,搞不懂了,还望指教!!
面包大师 2012-02-15
  • 打赏
  • 举报
回复
楼上说的很清楚了,第一个,p=new double(1000*1000*200);这样申请是在堆上开辟的内存,而你第二个double PP[1000][1000][200];这个是在栈上开辟的内存,这个在编译器中是有限制的,只能开辟1M的
IVERS0N 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ycfeng 的回复:]

??不是很懂,查查资料。
N久没写程序了。尽管96年刚学C时,就用turbo C2.0开发了一个粗糙的打坦克游戏,呵呵!
[/Quote]

http://www.cnblogs.com/guyan/archive/2011/12/23/2299179.html
ycfeng 2012-02-15
  • 打赏
  • 举报
回复
??不是很懂,查查资料。
N久没写程序了。尽管96年刚学C时,就用turbo C2.0开发了一个粗糙的打坦克游戏,呵呵!
面包大师 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ivers0n 的回复:]
第一个堆上开辟空间

第二个栈上开辟空行 有限制 默认1M
[/Quote]
+++
IVERS0N 2012-02-15
  • 打赏
  • 举报
回复
第一个堆上开辟空间

第二个栈上开辟空行 有限制 默认1M

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧