实现动态数组,如何重新分配内存 并保留原来数据?

Zack_888 2014-03-19 12:26:13
double *temp=new double[m_nSize];
memcpy(temp,m_pData,m_nSize*sizeof(double));
SAFEDELETES(m_pData); //宏定义,释放内存

m_nSize=34;
m_pData=new double[m_nSize]; // m_data是class 私有成员
memcpy(m_pData,temp,(m_nSize-1)*sizeof(double));
SAFEDELETES(temp); //宏定义,释放内存
这样子做不正确,如何改正?
...全文
646 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zack_888 2014-04-14
  • 打赏
  • 举报
回复
谢谢大家,大家我学会了用new delete做, 当然最好用vector。 8楼的答案很好啊!
lm_whales 2014-03-20
  • 打赏
  • 举报
回复
1)类成员,做两个对象,不就保留原始数据了么 2)单个对象,先分配新内存,后复制旧数据,然后释放旧内存,数据不就保留了么, 最后把新内存地址,赋值给成员对象的那个指针。 例如
 //  2.1)
         T * oldp =p;p=new T[XXX];     memcpy(p,oldp,N);,,,,,,;delete[] oldp; 
 //  2.2)
         T * newp =new T[XXX];      memcpy(newp,p,N); ,,,,,;   delete []p;  p = newp;
JiMoKuangXiangQu 2014-03-19
  • 打赏
  • 举报
回复
试试std::allocator结合std::uninitialized_copy
Zack_888 2014-03-19
  • 打赏
  • 举报
回复
c++菜鸟求助!
ningto.com 2014-03-19
  • 打赏
  • 举报
回复
std::vector<double> vec; ... vec.resize(34);
lyramilk 2014-03-19
  • 打赏
  • 举报
回复
虽然动态数组可能有很多方案,但我觉得第一个应该想到的就是vector。。。delete这个关键字我己经很少很少用了。
赵4老师 2014-03-19
  • 打赏
  • 举报
回复
为什么不用malloc、realloc、free呢? 记不得哪位C++大牛在哪本学习C++的书的前言里面说过 “用C语言1000行源码能完成的工作千万不要用C++重写!”
starytx 2014-03-19
  • 打赏
  • 举报
回复
你让A指向你开辟的空间,后来memcpy(A,B),你释放了B指向的空间,这个和A又有什么关系呢?
titer1 2014-03-19
  • 打赏
  • 举报
回复
把你的宏内容贴出来看看

65,207

社区成员

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

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