请教new可以代替malloc那么realloc可否替代
我在用new申请一段内存,但内存要在运行中动态加长,请教如何实现
[解决办法]
再new一次,原来的拷贝到新的,再删除原来的
[解决办法]
在原来的地址上是不可能扩大了,只能重新分配一个2倍的内存,然后再把以前的拷贝过来
[解决办法]
realloc 其实也是 malloc-> copy-> free(以前的空间)
[解决办法]
int* p = new int[100];
for (int i = 0; i < 100; i++)
p[i] = i;
// realloc
int* t = p;
p = new int[150];
memcpy(p, t, _msize(t));
delete t;
//
[解决办法]
// p - Pointer
// s - One Size(Byte)
// n - New Number
#define RENEW(p, s, n)\
{\
char* pNew = new char[s * n];\
memcpy(pNew, p, _msize(p));\
delete p;\
p = pNew;\
}
[解决办法]
可以使用placement new预分配,定位new,即可以呵呵^_^okokok
[解决办法]
如果你想用realloc,请先考虑用标准容器
[解决办法]
C++ 中的 new 是针对对象的,不是针对内存空间的。。。如果你有 N 个对象,自然有 N 个 sizeof (对象)大小的空间需要分配。一个对象不可能自己变大,所以 realloc 是不需要对应操作的。
vector <T> t;
t.reserve( new_size ); 会为新的对象预留存储空间