c++ - 在 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;
}
解决方案
您需要手动为此指针分配内存:
int *arr = new int[k]{};
否则,您将获取循环范围内的本地数组的地址,该数组在循环结束时死亡。
请注意,当您完成动态分配的内存后,您还需要手动删除它:
delete [] arr;
当然,如果您无权访问循环本地名称arr
,则可以改为删除内存ptr
。
此外,这个构造:
cin >> k;
int arr[k];
是一个可变长度数组,在标准 c++ 中是不允许的。
推荐阅读
- python - 如何将“requests.get”的结果发送到另一个套接字?
- java - 如何在firestore中获取数组的每个元素
- android - Flutter 中不显示状态栏
- c# - 无法从“System.Generic.Collection.List”转换
- html - 字体系列在重新加载后立即显示问题
- scala - groupby中多列的Scala求和
- php - Symfony 在设置旧项目“vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php on line 243”时显示错误
- go - 如何修复“at=error code=H10 desc="App crashed"” go app 中的 heroku 错误
- php - 如何在 URL 中没有查询参数
- r - Shiny 不会在模块中呈现 uiOutput 数据