【发布时间】:2020-03-13 22:33:43
【问题描述】:
假设我们创建了动态分配的内存,例如:
int SIZE = 10;
int *p = new int[SIZE];
for(int i = 0; i < SIZE; ++i)
p[i] = i;
它会将 0 到 9 分配给我们的指针数组。
然后我想将 10,11,12 添加到数组中
我能做到吗:
p[10] = 10;
p[11] = 11;
p[12] = 12;
或者我应该这样做:
delete[] p;
size = 13;
p = new int[SIZE];
for(int i = 0; i < SIZE; ++i)
p[i] = i;
【问题讨论】:
-
既然是
C++,为什么不直接用vector<int>呢? -
这几乎没有帮助。我认为如果问题涉及使用数组,那么该建议作为“也......”的侧面答案很好,但这个问题非常具体地与动态数组有关。 SO 现在正在赢得它的刻板印象。
-
要调整数组的大小,您必须分配一个新数组并将旧元素复制到新数组,然后删除旧数组。 stackoverflow.com/questions/42238712/change-array-size-c
-
@sweenish -- 评论部分适用于 cmets,而不是答案。我认为评论为什么不使用
vector没有任何问题。 -
@machine_1 - 仅当内存已使用
malloc()、calloc()、realloc()分配时。但是由于各种原因,在 C++ 中不鼓励使用这些函数(来自 C) - 特别是,它给出了未定义的行为,用于为具有非平凡构造函数或析构函数的 C++ 类类型分配内存。
标签: c++ arrays pointers vector memory-management