如何在函数中返回指针数组

How do I return an array of pointers in a function?

本文关键字:返回 指针 数组 函数      更新时间:2023-10-16

所以我有一个指针数组,它引用了一个类的3个实例,我需要创建一个函数,获取对这3个实例的引用,并将其返回到该数组中。

以下是我一直在尝试的:

#include<cstdlib>
#include<cinttypes>
#include<random>
//Random number generator
uint8_t rand(uint8_t max){
    std::default_random_engine generator;
    std::uniform_int_distribution<uint8_t> distribution(0,max);
    return distribution(generator);
}
class MyClass{
    //...
}
myClass[100];
MyClass * getReferences(){ //What should the type of this be?
    MyClass * arrayOfPointers[3];
    for(uint8_t i=0;i<2;++i){
        arrayOfPointers[i]=&myClass[rand(2)];
    }
    return arrayOfPointers;
}
int main(){
    MyClass * arrayOfPointers[3]=getReferences();
    return EXIT_SUCCESS;
}

如前所述,您正在返回一个指向局部变量的指针,但这是不正确的。

使用标准的库容器来避免C样式数组的陷阱和麻烦。

std::array<MyClass *, 3> getReferences()
{
    std::array<MyClass *, 3> arrayOfPointers;
    for(int i=0; i < 2; ++i) // don't use tiny int types of small for loops. it's not faster and it's harder to maintain
    {
        arrayOfPointers[i] = &myClass[rand(2)];
    }
    return arrayOfPointers;
}
int main()
{
    std::array<MyClass *, 3> arrayOfPointers = getReferences();
}

在C++中返回指向局部变量的指针是不正确的。它可能导致内存冲突错误。如果您想从函数返回一个数组,您应该使用动态内存分配。CCD_ 1。使用后不要忘记删除它。delete[] arrayOfPointers;