我需要将数组从 {4, 2 ,5}
转换为 {4, 2, 5, 4, 2, 5}
。这是我的输出: {4, 2, 5, 3.21143e-322, 0, 2}
,这显然是不正确的。但我似乎无法从我的逻辑中找出问题所在。也许另一个角度可以发现这个问题。
这是我的代码:
void repeatArray(double* oldArray, int size) {
int newSize = size * 2;
double* newArray = new double[newSize];
for (int i = 0; i < size; i++) {
newArray[i] = oldArray[i];
}
for (int i = 0; i < size; i++) {
newArray[size+i] = oldArray[i];
}
oldArray = newArray;
delete [] newArray;
}
int main() {
double* oldArray = new double[3];
oldArray[0] = 4;
oldArray[1] = 2;
oldArray[2] = 5;
repeatArray(oldArray, 3);
for (int i=0; i<6; i++)
cout << oldArray[i] << endl;
delete []oldArray;
return 0;
}
原文由 Hassan 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题在于,仅将新数组分配给
repeatArray()
中的指针不会从外部更改它。你可以在
repeatArray()
中做的是 返回 新创建的数组。在
main()
中:oldArray = repeatArray(oldArray, 3);
一种可能更好的方法是使用
std::vector
根据需要自动调整大小。