无法使用C ++中的函数返回的数组

时间:2011-10-16 21:30:16

标签: c++ pointers

我有一个在数组中生成值并返回指向该数组的指针的函数。这是MWE代码:

int *f(size_t s)
{
    int *ret=new int[s];
    for(size_t a=0;a<s;a++)
    {
    ret[a]=a;
    cout << ret[a] << endl;
    }
    return ret;
}

请注意,我有一个cout行for for循环向我自己证明阵列正在正确填充。

现在,这是我的问题。我找不到使用返回数组的正确方法。这就是我一直在做的事情:

int main (void)
{
 int ary_siz = 10;
 int ary[ary_siz];
 *ary = *f(ary_siz);
 cout << ary[0] << endl;
 cout << ary[2] << endl;
 cout << ary[3] << endl;
}

ary中的第一个元素似乎是正确的。其他人(ary[1]ary[2] ...)则不然。谁能告诉我我做错了什么?

4 个答案:

答案 0 :(得分:4)

int main (void)
{
 int ary_siz = 10;
 int *ary = f(ary_siz);
 cout << ary[0] << endl;
 cout << ary[2] << endl;
 cout << ary[3] << endl;
 delete [] ary;
}

答案 1 :(得分:1)

作业

*ary = *f(ary_siz);

复制单个元素。使用

int main (void)
{
 int ary_siz = 10;
 int *ary = f(ary_siz);

 delete[] ary;
}

修复内存泄漏

答案 2 :(得分:1)

你在函数中分配一个数组,你只需将它的第一个元素分配给堆栈分配数组的第一个元素,而不是只使用返回的数组。

你应该做那样的事情:

int main (void)
{
 int ary_siz = 10;
 int *ary;
 ary = f(ary_siz);
 cout << ary[0] << endl;
 cout << ary[2] << endl;
 cout << ary[3] << endl;
 delete[] ary // don't forget to release the memory
 return 0; // You should return something in the main function
}

此外,在C ++中,您应该尽可能使用向量而不是“裸机”数组。

答案 3 :(得分:0)

这个怎么样?

int *ary = f(ary_siz);

您可以像在couts中一样使用[]运算符。