0

我阅读了动态数组并使用它,但我有一个问题:当我将以下格式放入原型时:

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

我在删除 [] 行中出现段错误。

4

1 回答 1

1

我只是假设你的意思是数组

int x[16];

你把这个函数称为

resizeArray (x, ...)

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

如果您将数组声明为

int* x = new int[16];

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

您可以只使用std::vectorand resize()。不要重新发明轮子(除非这是一项任务)。

编辑:刚刚发现这个:

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

会泄漏。删除多余的new[].

编辑2:

什么是

if ( i == index )
        i++;

应该做的?

于 2012-07-30T17:34:56.177 回答