C++ 如何使用*&;传递数组;在C++;
我阅读并使用它,但我有一个小问题: 当我将以下格式放入原型中时:C++ 如何使用*&;传递数组;在C++;,c++,arrays,function,memory,reference,C++,Arrays,Function,Memory,Reference,我阅读并使用它,但我有一个小问题: 当我将以下格式放入原型中时: void mmyfunc(int *& myArray) { //implementation } 1.如果我将数组传递给它,如何调用它?因为我得到: no matching function for call to 2.当我使用以下实现时: void NetworkSocket::resizeArray (int *&orig, int index, int size) { int *resize
void mmyfunc(int *& myArray)
{
//implementation
}
1.如果我将数组传递给它,如何调用它?因为我得到:
no matching function for call to
2.当我使用以下实现时:
void NetworkSocket::resizeArray (int *&orig, int index, int size)
{
int *resized = new int[size];
for (int i = 0; i < size; i++)
{
if ( i == index )
i++;
resized[i] = orig[i];
}
delete [] orig;
orig = (int *)new int[size];
orig = resized;
}
void NetworkSocket::resizeArray(int*&orig,int索引,int大小)
{
int*调整大小=新int[大小];
对于(int i=0;i
我在delete[]行中发现了seg错误。我将假定您的意思是数组
int x[16];
将函数调用为
resizeArray (x, ...)
所以delete[]
-显式地删除它会导致未定义的行为,因为它没有分配new[]
。此外,x
驻留在自动内存中,因此它会自行清理。此外,您不能重新分配数组数组不是指针。当作为参数传递时,它们会衰减为指针
如果将数组声明为
那么你的方法就行了。但还不完全是C++。 您只需使用
std::vector
和resize()
。不要重新发明轮子(除非这是一项任务)
编辑:刚刚发现这个:
orig = (int *)new int[size];
orig = resized;
会漏。删除额外的新[]
编辑2:
什么事
if ( i == index )
i++;
应该怎么做?如何向其传递“数组”?而且,这段代码到处都是漏洞和故障:为什么要不厌其烦地惹上额外的麻烦呢?使用
std::vector
。您遗漏了代码中最重要的部分。。。你怎么称呼它。我本来会把向量
的建议放在第一位,但那只是我。@Etienedemartel可能是出于教育目的。“那么你的方法就行了”。。。一般做法是肯定的,但不是当前的实施。
if ( i == index )
i++;