c++可以实现使用new分配内存后,再增加内存吗?

查看:299
本文介绍了c++可以实现使用new分配内存后,再增加内存吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

int main()
{

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

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

解决方案

方法有很多,列举两种:

  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++可以实现使用new分配内存后,再增加内存吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆