Tar*_*aru 2 c++ memory arrays expand dynamic
有没有办法扩展动态内存阵列?像这样:
int *a = new int[5];
*a = new int[2];
Run Code Online (Sandbox Code Playgroud)
这合法吗?
您无法扩展此类型的动态内存阵列.你可以使用malloc,realloc虽然你需要这个设施,但我会建议反对,并建议包括<vector>和使用std::vector.它有一种resize方法.
此外,您所描述的将无法编译.以下将:
1: int *a = new int[5];
2: a = new int[2];
Run Code Online (Sandbox Code Playgroud)
以上将分配两个内存块,这两个内存块都不会被销毁.第二行将简单地为同一int *a指针分配一个新数组.当分配的内存停止被任何指针引用时,这称为内存泄漏.上面的代码丢失了任何引用,new int[5]并且无法将此内存释放到操作系统.
虽然这不是一个非常实用的示例,但有多种方法可以调整数组/向量的大小.由于增加数组大小通常很实用,我会这样做:
{ // C++ vector on the stack (although internally vector uses memory from the heap)
std::vector<int> a(1024);
// do smth
a.resize(4096); // note: this does not always reallocate
// do smth else
}
{ // C++ everything on the heap
std::vector<int> *a = new std::vector<int>(1024);
// do smth
a->resize(4096); // note: this does not always reallocate
// do smth else
delete a;
}
{ // C style
int *a = (int*)malloc(1024*sizeof(int));
// do smth
a = realloc(a, 4096*sizeof(int));
// do smth else
free(a);
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是,realloc没有做任何聪明的事情.它所做的就是:
mallocmemcpyfree| 归档时间: |
|
| 查看次数: |
4201 次 |
| 最近记录: |