C中动态改变数组大小

新手上路,请多包涵

我需要将数组从 {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 许可协议

阅读 512
1 个回答

问题在于,仅将新数组分配给 repeatArray() 中的指针不会从外部更改它。

你可以在 repeatArray() 中做的是 返回 新创建的数组。

 double* 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];
    }
    delete [] oldArray;
    return newArray;
}

main() 中:

oldArray = repeatArray(oldArray, 3);


一种可能更好的方法是使用 std::vector 根据需要自动调整大小。

原文由 Minas Mina 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏