我有一个在数组中生成值并返回指向该数组的指针的函数。这是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]
...)则不然。谁能告诉我我做错了什么?
答案 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中一样使用[]运算符。