Hug*_*ugh 0 c++ arrays pointers function
我正在尝试创建一个getSortedRanks返回数组的函数.我从这个问题中复制了返回数组的格式.函数返回数组但是数组没有正确返回.
#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;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,输出是:
ranked member is 3
ranked member is 0
ranked member is 0
ranked member is 2686744
Run Code Online (Sandbox Code Playgroud)
数组的第一个元素sortedRanks总是正确的,但其他元素则不正确.如何更正返回数组的方式?
具有自动存储持续时间的阵列:
int rankedMembers[familyMembers] = {3, 4, 2, 1};
Run Code Online (Sandbox Code Playgroud)
生活在堆栈上并在getSortedRanks完成后被摧毁.返回的指针无效.取消引用它会导致未定义的行为.
你要么想要:
动态分配数组(在堆上),因为您将管理它的生命周期:
int *getSortedRanks()
{
return new int[familyMembers]{3, 4, 2, 1};
}
Run Code Online (Sandbox Code Playgroud)
delete []使用后别忘了.使用智能指针将帮助您.
使用std::vector或std::array按值返回:
std::array<int, familyMembers> getSortedRanks()
{
return {3, 4, 2, 1};
}
Run Code Online (Sandbox Code Playgroud)(订购从更少到更优惠)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |