在 for 循环中定义的临时数组,并分配给属于指针数组的指针

Temporary array defined inside for loop and assigned to a pointer belonging to an array of pointers

本文关键字:数组 指针 属于 分配 循环 for 定义      更新时间:2023-10-16

在这里,我在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;
}

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

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

否则,您将获取循环作用域本地数组的地址,该数组在循环结束时死亡。

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

delete [] arr;

当然,如果您无法访问循环本地名称arr,您可以通过ptr删除内存。

此外,此构造:

cin >> k;
int arr[k];

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