在c++数组的末尾添加一个值

Adding one value at the end of c++ array

我想给C++数组加一个值,我有这段代码:

void print_array(int *array, int size)
{
    for (int i = 0; i < size; ++i)
    {
        std::cout << array[i] << ' ';
    }
    std::cout << '\n';
}

void add_to_array(int *array, int size, int value)
{
    int *newArr = new int[size + 1];
    memcpy(newArr, array, size * sizeof(int));
    delete[] array;
    array = newArr;
    array[size + 1] = value;
}

int main(int argc, char const *argv[])
{
    int *array = new int[10];
    array[0] = 0;
    array[1] = 1;
    array[2] = 2;
    array[3] = 3;
    array[4] = 4;
    array[5] = 5;
    array[6] = 6;
    array[7] = 7;
    array[8] = 8;
    array[9] = 9;
    print_array(array, 10);
    add_to_array(array, 10, 11);
    print_array(array, 11);
}

我 运行 时没有收到任何错误,但输出非常奇怪:

0 1 2 3 4 5 6 7 8 9 
0 0 -307888112 32767 4 5 6 7 8 9 1041

有什么办法可以正确地做到这一点吗?

我知道 stl 列表中的向量,但我不能使用它们,所以不建议使用

C++ 的函数参数是所传递内容的副本,更改它们不会影响所传递的内容。您应该使用引用来让函数更改传递的内容。

另请注意,现在新数组有 size + 1 个元素,最后一个元素的索引是 size,而不是 size + 1

固定代码:

void add_to_array(int *&array, int size, int value) // add & to make "array" a reference
{
    int *newArr = new int[size + 1];
    memcpy(newArr, array, size * sizeof(int));
    delete[] array;
    array = newArr;
    array[size] = value;
}