如何通过函数参数返回动态数组?

时间:2014-12-14 15:56:59

标签: c++ function pointers return

如何通过参数从my_func返回值?应用程序在printf期间崩溃。我不知道为什么,我认为* abc将指向xxx ......

void my_func(int *_return)
{
    int *xxx = new int[5];
    for (int i = 0; i < 5; i++) xxx[i] = 100+i;

    _return = xxx;

    return;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int *abc = NULL;

    my_func(abc);
    printf("%d", abc[2]);

    return 0;
}

3 个答案:

答案 0 :(得分:1)

for (int i = 0; i <= 5; i++) xxx[i] = 100+i;  <<<< i < 5

索引是4,因为5将超出界限。

要使其生效,您应该传递指针的地址: -

my_func(&abc);

void my_func(int**_return)

答案 1 :(得分:1)

有两种方法。第一个是使用参考。例如

void my_func(int * &a)
{
    a = new int[5];
    for (int i = 0; i < 5; i++) a[i] = 100+i;
}

并且函数被调用为

my_func( abc );

第二个是使用指针指针。例如

void my_func(int **a)
{
    *a = new int[5];
    for (int i = 0; i < 5; i++) ( *a )[i] = 100+i;
}

并且函数被调用为

my_func( &abc );

在这两种情况下你都应该打电话

delete [] abc;

当不再需要数组时。

当然,您可以使用std::vector代替数组

void my_func( std::vector<int> &v )
{
    v.reserve( 5 );
    for (int i = 0; i < 5; i++) v.push_back(  100+i );
}

并且可以像

一样调用该函数
std::vector<int> abc;

my_func( abc );   

答案 2 :(得分:0)

您有未定义的行为

for (int i = 0; i <= 5; i++)

长度为5的数组的唯一有效索引是[0][4],将终止条件更改为

for (int i = 0; i < 5; i++)