简单动态数组增大分配问题!!

shinefen 2009-06-04 06:17:43
我用的是
int *shu = new int [5];

...

但我这时候想要一个int[6]的数组.
我不要多申请多个数组,只想把shu变大;shu可以维持原有数据也可以不维持.
但前提是不想delete shu;之后再动态申请.

而且不想用STL的容器;

怎样能强制转换? ()是否同样道理能缩小数组长度呢

我用的是int类型..是否char类型就能实现呢?
...全文
30 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinefen 2009-06-04
  • 打赏
  • 举报
回复
??我用的都是ptr1.没有用ptr2啊?..
这么深层的我不知道...
Jalien 2009-06-04
  • 打赏
  • 举报
回复
呵呵 确实不一定会返回原先的指针。
这个msdn上面已经说明了:realloc returns a void pointer to the reallocated (and possibly moved) memory block.[Quote=引用 11 楼 Loaden 的回复:]
呵呵,楼主啊:则realloc()不一定会返回原先的指针,原先的内容虽不会改变,但新多出的内存则未设置初值!
也就是说,也是先free,再malloc的。
[/Quote]
老邓 2009-06-04
  • 打赏
  • 举报
回复

#include <stdlib.h>
#include <memory.h>
#include <stdio.h>

int main()
{
char *ptr1 = (char*)malloc(10);
char *ptr2;

memset(ptr1, 'A', 9);
*(ptr1+9)='\0';

printf("before realloc: ptr= %x [%s]\n", ptr1, ptr1);

ptr2 = (char*)realloc(ptr1, 40960);

printf("after realloc: ptr= %x [%s]\n", ptr2, ptr2);
}

输出结果:
before realloc: ptr= 38f2c8 [AAAAAAAAA]
after realloc: ptr= 4ae868 [AAAAAAAAA]
可曾看到地址变了?

楼主这种求学精神并不可取!
老邓 2009-06-04
  • 打赏
  • 举报
回复
呵呵,楼主啊:则realloc()不一定会返回原先的指针,原先的内容虽不会改变,但新多出的内存则未设置初值!
也就是说,也是先free,再malloc的。
shinefen 2009-06-04
  • 打赏
  • 举报
回复

感谢你们~我学到东西了~给大家分享下!!!!!
//////////////////////////////////////
int qushu=3;
int *p1 =new int[qushu];
unsigned short nlen=*(p1-sizeof(int))/sizeof(int);//获取动态生成数组长度
cout<<nlen;

cout<<"\t "<<icount<<"个\n ";


qushu=2;
(int *)realloc(p1,qushu*sizeof(int)); unsigned short nlen1=*(p1-sizeof(int))/sizeof(int);//获取动态生成数组长度
cout<<nlen1;
Jalien 2009-06-04
  • 打赏
  • 举报
回复
有现成的东西不用。。。。。
crushor 2009-06-04
  • 打赏
  • 举报
回复
先申请再释放,把原来的数据拷过去

或者,这样的话还new个什么啊?

干脆自己先分配一大块内存,然后自己写个mynew,mydelete,每次到这个缓冲区自己管理就完了。
mengjfu 2009-06-04
  • 打赏
  • 举报
回复
(char *)relloc(shu,6*sizeof(char))可否?
HelloDan 2009-06-04
  • 打赏
  • 举报
回复
用STL的vector

或者这样:

int *shu = new int [5];
//.................
delete [] shu;
shu=null;
shu=new int[6];
//...................
老邓 2009-06-04
  • 打赏
  • 举报
回复
当然,你可以先申请一块大内存,然后再强制转换。
比如std::string
不过这样就没意思了。
老邓 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Loaden 的回复:]
先delete[],再申请。
STL也是这样的原理!
[/Quote]
只能这样!!!
没有别的方法。
zhh157 2009-06-04
  • 打赏
  • 举报
回复
realloc或许可以满足
老邓 2009-06-04
  • 打赏
  • 举报
回复
先delete[],再申请。
STL也是这样的原理!

64,654

社区成员

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

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