我正在尝试创建一个getSortedRanks
返回数组的函数.我从这个问题中复制了返回数组的格式.函数返回数组但是数组没有正确返回.
#include#include #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
完成后被摧毁.返回的指针无效.取消引用它会导致未定义的行为.
你要么想要:
动态分配数组(在堆上),因为您将管理它的生命周期:
int *getSortedRanks() { return new int[familyMembers]{3, 4, 2, 1}; }
delete []
使用后别忘了.使用智能指针将帮助您.
使用std::vector
或std::array
按值返回:
std::arraygetSortedRanks() { return {3, 4, 2, 1}; }
(订购从更少到更优惠)