我正在尝试创建一个名为 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
的第一个元素始终是正确的,但其他元素则不是。如何更正返回数组的方式?
最佳答案
具有自动存储持续时间的数组:
int rankedMembers[familyMembers] = {3, 4, 2, 1};
存在于堆栈中并在 getSortedRanks
完成后被销毁。返回的指针无效。取消引用它会导致 undefined behavior .
你要么想要:
动态分配数组(在堆上),因为您将管理它的生命周期:
int *getSortedRanks() { return new int[familyMembers]{3, 4, 2, 1}; }
不要忘记在使用后
删除[]
。使用 smart pointer会帮助你的。使用
std::vector
或std::array
并按值返回:std::array<int, familyMembers> getSortedRanks() { return {3, 4, 2, 1}; }
(从少到多排序)
关于c++函数返回不正确的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34245418/