首页 > 解决方案 > 在 for 循环中定义的临时数组并分配给属于指针数组的指针

问题描述

在这里,我在 for 循环中初始化了一个 temp arr,并将其地址分配给属于指针数组的 ptr,但是当我们退出 for 循环时,存储在该地址中的数据会丢失。如果我们打印该地址的值,它会显示垃圾值。如何解决这个问题?

int n;cin>>n;
int* ptr[n];
for(int i=0;i<n;i++){
    int k;
    cin>>k;
    int arr[k];
    for(int j=0;j<k;j++){
        cin>>arr[j];
    }
    ptr[i]=arr;
}

标签: c++

解决方案


您需要手动为此指针分配内存:

int *arr = new int[k]{};

否则,您将获取循环范围内的本地数组的地址,该数组在循环结束时死亡。

请注意,当您完成动态分配的内存后,您还需要手动删除它:

delete [] arr;

当然,如果您无权访问循环本地名称arr,则可以改为删除内存ptr

此外,这个构造:

cin >> k;
int arr[k];

是一个可变长度数组,在标准 c++ 中是不允许的。


推荐阅读