【发布时间】:2021-12-20 07:09:15
【问题描述】:
我想用 C++ 编写一个创建单调递增值数组的方法。它有 int begin、int end、int interval 的输入。
在这个例子中;方法应返回 [0,1,2,3,4,5,6,7,8,9,10] 的数组。当我打印结果时,它应该打印出前两个索引并得到 0 和 1。但是,当我打印它时,它为第一个给出 0,第二个给出 9829656。
当我只打印一个索引时它总是正确的,但是当我打印多个索引时,除了第一个打印的索引之外的每个值都会给出不同的结果。我认为其他结果与内存地址有关,因为我使用了指针。
#include <iostream>
using namespace std;
int* getIntervalArray(int begin, int end, int interval){
int len = (end - begin) / interval + 1;
int result[11] = {};
for (int i = 0; i <= len - 1; i++) {
result[i] = begin + interval * i;
}
return result;
}
int main(){
int begin = 0;
int end = 10;
int interval = 1;
int* newResult = getIntervalArray(begin, end, interval);
cout << newResult[0] << endl;
cout << newResult[1] << endl;
return 0;
}
【问题讨论】:
-
int result[11] = {};是本地数组,无法返回。您需要创建动态数组int* result = new int[11]以便从函数中返回它。但是你需要记住delete[]那个数组,在使用之后,所以我建议在函数外部使用本地数组并传递给函数,或者new int[11]和delete[]在你当前的代码之外,但它看起来更好地使用本地数组。 -
这是你要返回的悬空指针,请参阅:stackoverflow.com/a/13132808/13113537。如果您要使用带有“new”或“malloc”的动态分配数组,还要注意内存泄漏示例。
-
@shjeff 为什么我需要删除 newResult 数组?
-
@user6210457 因为这是您正在借用的某种内存“(堆)”,并且您的程序不应窃取/消耗任何字节。通过使用
delete[],您是在告诉操作系统您不再需要该内存。
标签: c++ arrays pointers methods