找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1007|回复: 3

问一个问题

[复制链接]
发表于 2009-11-4 02:22:17 | 显示全部楼层 |阅读模式 IP:江苏扬州
我是个初学者,有个问题想向高手请教一下,

动态内存分配的new操作
  int* v;
......

v=new int[10];
是在内存中重新分配对应的空间,使v指向起始地址对吧?如果原来v指向一个一维数组且元素都已赋值,如果执行以上操作,是否原来数组里的值都会丢失呢?
发表于 2009-11-4 02:22:18 | 显示全部楼层 IP:江苏扬州
不会丢失,new是在用户可以用的空闲的内存空间中取出指定的大小分配给指针,而v原先指向一个数组,那么那个数组所在的空间还是已经被利用的(数据仍然在那里,但是没有办法访问他,造成内存泄露),而不是空闲的。那么v另外分配一个空间给他.只是告诉计算机,这块空间被标记为已使用。
new标记一块地址被使用,delete标记一块地址使用完毕(即未被使用)
回复

使用道具 举报

发表于 2009-11-4 02:22:19 | 显示全部楼层 IP:江苏扬州
谢谢指教, 那如果我不能确定数组的大小,如果数组满了以后我想扩大size该怎么处理呢?
回复

使用道具 举报

发表于 2009-11-4 02:22:20 | 显示全部楼层 IP:江苏扬州
扩大数组可以手动控制:

程序代码:

int *p=new int[4000];
for(int i=0;i<4000;i++)
p[i]=i+1;
int *tmp=new int[8000];
for(int i=0;i<4000;i++)
tmp[i]=p[i];
delete []p;
p=tmp;


当然,用realloc比较简单些,下面是MSDN上的例子:

程序代码:

Example
/* REALLOC.C: This program allocates a block of memory for
* buffer and then uses _msize to display the size of that
* block. Next, it uses realloc to expand the amount of
* memory used by buffer and then calls _msize again to
* display the new amount of memory allocated to buffer.
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void main( void )
{
long *buffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf( "Size of block after malloc of 1000 longs: %u\n", size );
/* Reallocate and show new size: */
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
exit( 1 );
size = _msize( buffer );
printf( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
exit( 0 );
}
Output
Size of block after malloc of 1000 longs: 4000
Size of block after realloc of 1000 more longs: 8000
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 07:29 , Processed in 0.220534 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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