我正在尝试创建一个名为getSortedRanks
的函数,它返回一个数组。我从这个问题Return array in a function复制了返回数组的格式,但是没有正确返回数组。
#include <stdlib.h>
#include <stdio.h>
#define familyMembers 4
int *getSortedRanks()
{
int rankedMembers[familyMembers] = {3,4,2,1};
return rankedMembers;
}
int main()
{
int *sortedRanks = getSortedRanks();
//print the returned array
for(int i = 0; i < familyMembers; i ++)
{
cout << "ranked member is " << sortedRanks[i] << endl;
}
return 0;
}
当我运行它时,输出是:
ranked member is 3
ranked member is 0
ranked member is 0
ranked member is 2686744
数组sortedRanks
的第一个元素总是正确的,但其他元素则不正确。如何更正返回数组的方式?
答案 0 :(得分:5)
具有自动存储持续时间的数组:
int rankedMembers[familyMembers] = {3, 4, 2, 1};
生活在堆栈上并在getSortedRanks
完成后被销毁。返回的指针无效。取消引用它会导致undefined behavior。
你要么:
动态分配数组(在堆上),因为你将管理它的生命周期:
int *getSortedRanks()
{
return new int[familyMembers]{3, 4, 2, 1};
}
使用后请勿忘记delete []
。使用smart pointer可以帮助您。
使用std::vector
或std::array
并按值返回:
std::array<int, familyMembers> getSortedRanks()
{
return {3, 4, 2, 1};
}
(从较少到更有利的顺序排列)