c++可以实现使用new分配内存后,再增加内存吗?
巴扎黑
巴扎黑 2017-04-17 13:50:02
[C++讨论组]
#include 
#include 
#include 

using namespace std;

int main()
{

    char* arr = new char('A');
    cout << *arr << endl;
    return 0;
}

现在arr指向的内存空间只有一个'A',可不可以直接拓宽这个内存空间的大小,还保留这个内存空间中的数据。如果是重新使用arr = new char[10]这样的话,应该是直接改变了arr指向的内存地址吧,可不可以实现拓宽原arr指向地址的空间大小,还保留着原来的数据'A'呢?

巴扎黑
巴扎黑

全部回复(3)
PHP中文网

方法有很多,列举两种:

  1. 使用 memcpy 人工移动数据:

char* arr = new char('A');
char* new_mem = new char[10];
memcpy(new_mem, arr, sizeof(*arr));
delete arr;
arr = new_mem;
... 
// 最后回收内存要用 delete [];
delete []arr;
  1. 整套不要用 new,改换成 mallocrealloc

char* arr = malloc(sizeof(char));
*arr = 'A';

char* new_mem = realloc(arr, sizeof(char[10]));
arr = new_mem;

// 最后清理内存用 free
free(arr);
阿神

C++做法应该是使用vector来应对内存的动态需求这样:
vector<char> arr;
arr.push_back('A');

天蓬老师

1.不可以实现拓宽原arr指向地址的空间大小。

2.新开空间,地址肯定会变。

3.至于保留原内容,复制过去就行了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号