gpt4 book ai didi

c++ - 如何在 C++ 中使用 *& 传递数组

转载 作者:行者123 更新时间:2023-11-28 08:00:02 24 4
gpt4 key购买 nike

我读了dynamic array并使用它,但我有一个问题:当我将以下格式放入原型(prototype)时:

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;
}

我在 delete [] 行中遇到段错误。

最佳答案

我假设你指的是数组

int x[16];

你把这个函数称为

resizeArray (x, ...)

所以 delete[] 明确地导致未定义的行为,因为它不是用 new[] 分配的。此外,x 驻留在自动内存中,因此会自行清理。此外,您不能重新分配数组。 数组不是指针。当作为参数传递时,它们会衰减为指针。

如果您将数组声明为

int* x = new int[16];

那么您的方法就会奏效。但还不完全是 C++。

您可以只使用 std::vectorresize()。不要重新发明轮子(除非这是一项作业)。

编辑:刚发现这个:

orig = (int *)new int[size];
orig = resized;

会漏水。删除多余的 new[]

编辑 2:

什么是

if ( i == index )
i++;

应该做什么?

关于c++ - 如何在 C++ 中使用 *& 传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11726573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com