社区
C++ 语言
帖子详情
怎么样扩大new分配的内存?
happymoonfy
2005-04-07 08:39:22
请给出个例子,谢谢了。
int*p=new int[100];
我要使p指的空间变大,但不能改变原来空间中贮存的数据,C中可以用ralloc,在C++中怎么办?
有个思路,用new的定位操作,但不知道行不行也不知道怎么搞。
...全文
904
39
打赏
收藏
怎么样扩大new分配的内存?
请给出个例子,谢谢了。 int*p=new int[100]; 我要使p指的空间变大,但不能改变原来空间中贮存的数据,C中可以用ralloc,在C++中怎么办? 有个思路,用new的定位操作,但不知道行不行也不知道怎么搞。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
39 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cssport2000
2005-04-09
打赏
举报
回复
同意tip9914(尖尖) 顶!
ysbcg
2005-04-09
打赏
举报
回复
呵呵 同意tip9914(尖尖) ,c++本来就有这个功能啊
不过效果和你自己重新申请然后copy一样(因为系统就是这么实现的)
tip9914
2005-04-09
打赏
举报
回复
回复人: happymoonfy(快乐精灵) ( ) 信誉:100 2005-4-8 18:29:34 得分: 0
回复人: tip9914(尖尖) ( ) 信誉:100
很简单的啊,显然用new placement了!
char* p=new int[100];
p=new(p) int[1000];
就这样啊,内存中数据都不会被改变
//-----------------------------------
这样行不行啊??有点怀疑。
----------------------------------------------------------------
当然可以了,不信自己试试就知道了,p的地址不会变的,是在原来的基础上又加上需要扩大的内存
MagicCarmack
2005-04-09
打赏
举报
回复
重新new一个
然后数据memcpy( )过去
并释放原来那个
可以用 vector来搞定!
lvjinhua
2005-04-09
打赏
举报
回复
又得1分,好可怜呀!
我相信申请新的空间,将旧内容拷入其中,再释放旧空间是即安全又可靠的方法!
Zark
2005-04-09
打赏
举报
回复
采用placment new对于你的程序来说是安全,如果你想确认它是新增的空间而不是重新分配的,比较p的值就可以了.
但是placment new失败的可能相对比较大,举例来说,在p前面的空间和p后面的空间都已经被占用的情况下,即使在其他地方仍为30字节以上的空间,placement new仍会失败,所以必须对p进行检查.
其实"re-new"也没有什么难的,不想楼上各位为什么齐声反对.例子如下:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int nLen=20;
char * p=new char[nLen];
cin>>p;
cout<<p<<endl;
char* tmp=new char[30];
memmove(tmp,p,nLen);
delete []p;
p=tmp;
cout<<p<<endl;
....
delete []p;
return 0;
}
sapphirez
2005-04-08
打赏
举报
回复
我也曾经遇到这样的问题.也是没很好的办法解决.听说可以用Verctor类.但我刚学C++不久.对STL不太熟悉.楼主要是能解决的话.顺便告知一声.谢谢
lgsnake
2005-04-08
打赏
举报
回复
就是使用vector或者list之类的,自动管理,要好多有好多
happymoonfy
2005-04-08
打赏
举报
回复
顺便问一下,初始化一个很大的数组用什么方法?还用循环?全局的是自动初始化吗?
sharkabc
2005-04-08
打赏
举报
回复
vector list
Devillove
2005-04-08
打赏
举报
回复
you can use STL;
bluedodo
2005-04-08
打赏
举报
回复
关注
Beover1984
2005-04-08
打赏
举报
回复
我也同意几位说的,为什么不试试vector呢?
lvjinhua
2005-04-08
打赏
举报
回复
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char * p=new char[20];
cin>>p;
cout<<p<<endl;
p=new(p) char[30];
cout<<p<<endl;
return 0;
}
我试了,这样做可以,但不知道安全不,也不知道它是在以前的基础上增加呢还是重新分配30个空间???
junguo
2005-04-08
打赏
举报
回复
可以自己写自己的数组类,通过重载new来实现动态分配!
happymoonfy
2005-04-08
打赏
举报
回复
回复人: tip9914(尖尖) ( ) 信誉:100
很简单的啊,显然用new placement了!
char* p=new int[100];
p=new(p) int[1000];
就这样啊,内存中数据都不会被改变
//-----------------------------------
这样行不行啊??有点怀疑。
tip9914
2005-04-08
打赏
举报
回复
很简单的啊,显然用new placement了!
char* p=new int[100];
p=new(p) int[1000];
就这样啊,内存中数据都不会被改变
HUDIEGU
2005-04-08
打赏
举报
回复
学习~
jingyueid
2005-04-08
打赏
举报
回复
relloc 的做法也是堆上重新分配内存,然后使用memcpy()把源数据可拷贝过去。
下面的方法可以满足楼主的要求:
template< class DataPtr >
class Demo< DataPtr >
{
public:
Demo();
Demo( const Demo & );
~Demo(); /* 小心处理析构函数 */
/*
* 补充你自己的方法
*/
/*
- 当需要插入新项时
* relloc aIdxList数组,这里并不需要构造函数,
* 所以很安全.
* 分配一个DataPtr所指向的内存出来
* 并该内存的指针添入数组新增项内。
*/
int Insert( ... );
int Delete( ... );
private:
int nLength; /* the count */
DataPtr aIdxList; /* every entry will point to a DataPtr */
};
windwolfreal
2005-04-08
打赏
举报
回复
只能重新new一块内存 没办法的
要是想把内存缩小,倒是可以用new定位
比如:
char a[100];//原来的大小
CData* pdata;//你想用的东东, sizeof(data)<100
//则你可以分配在a上
pdata = new (a) CData();
//ok~
加载更多回复(19)
动态
分配
内存
——
new
/delete
动态
分配
内存
1.使用
new
分配
内存
2.使用delete释放
内存
1.使用
new
分配
内存
使用格式:
new
数据类型
new
经常和指针一起使用,指针真正的用武之地就是在运行阶段指向未命名的
内存
以存储值。 eg:在运行阶段为一个int值
分配
未命名的
内存
//通过指针来访问未命名
内存
的值 int * ptr_int =
new
int; 解释:ptr_int 的
内存
2.使用delete释放
内存
和
new
配对使用 //释放
new
分配
的
内存
delete ptr_int; ...
变量声明有没有
分配
内存
?
Q1: int i 这个有没有
分配
内存
呢? int *p 呢? 具体是在栈空间还是在堆空间里
分配
内存
呢? A1: int i; int *p; 这两个都在栈区
分配
了
内存
空间 但是p指向的地址为野地址,不可直接拿来使用 即p指向的空间没有
分配
Q2:在Java中定义数组时必须
分配
内存
,这句话是错的还是对的呢 A2: Java
C++学习10:使用
new
分配
内存
在C++中,可以沿用C中的malloc
分配
内存
,也可以使用
new
运算符。今天就来学习使用
new
分配
内存
。
new
的作用和使用方法:
new
的作用在于可以在程序运行阶段动态
分配
内存
,
内存
的大小在运行时根据需要确定,从而高效利用
内存
空间。
new
的使用方法如下: typeName* pointer_name =
new
typeName 1 2 使用时用户需要指定类型(指针类型和要开辟的
内存
存储的数据类型),
new
可以自动找到一个正确长度的
内存
块,并返回
内存
块的地址。
分配
内存
失败时,默认抛出bad_alloc异
c++中用
new
分配
内存
new
的作用和使用方法如下:
new
的作用在于可以在程序运行阶段动态
分配
内存
,
内存
的大小在运行时根据需要确定,从而 高效利用
内存
空间。
new
的使用方法如下: typeName* pointer_name =
new
typeName 使用时用户需要指定类型(指针类型和要开辟的
内存
存储的数据类型),
new
可以自动找到一个 正确长度的
内存
块,并返回
内存
块的地址。
分配
内存
失败时,默认抛出bad_al...
【C++】动态
内存
分配
详解(
new
/
new
[]和delete/delete[])
一、为什么需要动态
内存
分配
? 在C++程序中,所有
内存
需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的
内存
需求只能在运行时确定的情况。 例如,当需要的
内存
取决于用户输入。 在这些情况下,程序需要动态
分配
内存
,C ++语言将运算符
new
和delete合成在一起。 (1)特点 1.C++中通过
new
关键字进行动态
内存
申请 2.C++中的动态
内存
分配
是基于类型进行的 ...
C++ 语言
65,183
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章