c++11 - crtls 我的头类中的有效堆指针(块)
问题描述
我试图通过创建另一个指针然后将其复制到原始指针来增加指针大小,但首先它只打印存储在其中的内存地址,然后它因调试断言失败而崩溃。
int sumArray(int* arr, unsigned r) {
r++;
int *secArr = new int[r];
for (int i = 0; i<r - 1; i++)
{
secArr[i] = arr[i];
}
secArr[r - 1] = sum % r;
delete[] arr;
arr = new int[r];
for (size_t i = 0; i < r - 1; i++)
{
arr[i] = secArr[i];
}
delete[] secArr;
return 0;
}
解决方案
C++ 使用按值传递,除非您明确使用引用。Nowint* arr
是一个指针,这个指针在这里是按值传递的。这意味着您将获得指针的副本,但不会获得指向元素的副本。所以你可以更新arr[0]
但不能更新arr
自己。
话虽如此,不要使用这样的指针。使用std::vector<int>& arr
.
推荐阅读
- sql - First character of each word in a string
- node.js - 尝试将我的 React 应用程序部署到 Heroku 时出错
- ios - 在 SwiftUI 的 ZStack 中根据同级视图的大小配置边缘插图
- android - 尝试实现 ar 核心时无法加载 Renderable
- firebase - 我想在 Flutter 中使用来自 firebase 的十六进制代码
- google-bigquery - Extend BigQueryExecuteQueryOperator with additional labels using jinja2
- powershell - Typing fully qualified type names in powershell?
- maximo - Maximo Spatial: Configure text at top left corner of map?
- java - 有没有办法在不创建许多集合实例的情况下将集合映射到字符串?
- python - python pygame animation works without class but as soon as i put it into a class it doesnt want to work?