C++ 使用C+中函数返回的数组时遇到问题+;

C++ 使用C+中函数返回的数组时遇到问题+;,c++,pointers,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; } ary中的第一个元素似乎是正确的。其他(ari[1],ari[2]…)则不是。谁能告诉我我做错了什么吗?i

我有一个函数,它在数组中生成值并返回指向该数组的指针。以下是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;
}
ary
中的第一个元素似乎是正确的。其他(
ari[1]
ari[2]
…)则不是。谁能告诉我我做错了什么吗?

intmain(void)
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;
}
{ 内部尺寸=10; int*ari=f(ari_siz); cout
int main(无效)
{
内部尺寸=10;
int*ari=f(ari_siz);
不能

*ary = *f(ary_siz);
复制单个元素。使用

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

 delete[] ary;
}
修复内存泄漏以及分配

*ary = *f(ary_siz);
复制单个元素。使用

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

 delete[] ary;
}
同时修复内存泄漏

这个怎么样

int *ary = f(ary_siz);
您可以像在沙发上一样使用[]操作符。

这个怎么样

int *ary = f(ary_siz);

您可以像在couts中一样使用[]操作符。

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

你应该这样做:

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
}
int main(无效)
{
内部尺寸=10;
国际货币基金组织;
ary=f(ary_siz);

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

你应该这样做:

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
}
int main(无效)
{
内部尺寸=10;
国际货币基金组织;
ary=f(ary_siz);

在回答了答案中的要点之后,你可能会惊讶地发现,
ari[1]
仍然没有打印出来。谢谢Marcelo.ari[1],而且我从来没有相处过。在回答了答案中的要点之后,你可能会惊讶地发现,
ari[1]
仍然没有打印出来。谢谢Marcelo.ari[1]无论如何,我从来都没有相处过。使用
std::array
也是可以接受的(除了
std::vector
)此外,主< <代码>不需要返回值;默认情况下,代码返回>代码> 0代码/>代码>在没有明确的代码>返回< /COD>语句之前。从未听说过STD::数组:它是C++ 11的新特性吗?至于缺少的代码>返回< /C>语句,我认为它是坏的样式,更多的是忘记了显式返回的指示。:array
是TR1的
std::TR1::array
的C++11实现,而TR1又是Boost的
Boost::array
的实现。至于missing
return
,我认为应用程序的返回代码具有任何相关性或意义是非常不寻常的,因此只有当它是非默认返回值时才应该出现ue.但是,这当然是完全主观的。@akappa-谢谢。谢谢你提醒我释放内存并返回一些主要内容。我还不知道。另外,我正在实现你关于向量的建议。这里有一个问题:向量是“裸机”数组的类包装器吗?换句话说,所有的东西都是tr吗对于向量为真的数组,使用
std::array
也是可以接受的(除了
std::vector
)此外,主< <代码>不需要返回值;默认情况下,代码返回>代码> 0代码/>代码>在没有明确的代码>返回< /COD>语句之前。从未听说过STD::数组:它是C++ 11的新特性吗?至于缺少的代码>返回< /C>语句,我认为它是坏的样式,更多的是忘记了显式返回的指示。:array
是TR1的
std::TR1::array
的C++11实现,而TR1又是Boost的
Boost::array
的实现。至于missing
return
,我认为应用程序的返回代码具有任何相关性或意义是非常不寻常的,因此只有当它是非默认返回值时才应该出现ue.但是,这当然是完全主观的。@akappa-谢谢。谢谢你提醒我释放内存并返回一些主要内容。我还不知道。另外,我正在实现你关于向量的建议。这里有一个问题:向量是“裸机”数组的类包装器吗?换句话说,所有的东西都是tr吗数组是否适用于向量?嗯……你偷了
delete[]
part:)并不是有意的——只是在我发布第一个答案之前没有考虑过。不过,先发布了这个答案,我向你致谢。沃恩(和塞赫)-格雷西亚斯·阿米戈斯。这很有效——它指出了我困惑的核心。我得到的大多数错误MSG都与类型错误有关(例如“无法将int转换为*int…”等等),并且,考虑到这个问题,我认为问题在于我没有得到返回类型的真正含义。但是,在你的回答中,你没有声明指向int数组的指针来初始化返回数组,你只是有一个指向int的普通指针。但是你把它当作数组来处理,我认为我发布的问题和回答说的是verboten、 我很沮丧,因为我在不了解发生了什么的情况下只能进行代码复制。我读过很多关于指针和数组的看似矛盾的东西。Blerk。@bev:那很好。我很高兴你不仅仅是接受了它。这意味着你最终会成为真正理解它的人之一。不过,这在很大程度上也是离题的你知道在StAcQuoad上有一个C++聊天室吗?……MMMM……你偷了<代码>删除[]/COD>部分::)不意味着,直到我发布第一个答案后才想到它。+ 1给你先发布。沃恩(和SEHE)-格雷西亚斯·阿米戈斯。这很有效——它指出了我困惑的核心。我得到的大多数错误MSG都与类型错误有关(例如“无法将int转换为*int…”等等),并且,考虑到这个问题,我认为问题在于我没有得到返回类型的真正含义。但是,在您的回答中,您没有声明指向int数组的指针来初始化返回数组,您只是有一个指向int的普通指针。但是,您将其视为一个A