实现动态大小的数组时出现问题

问题描述 投票:-4回答:1

我正在编写一个动态大小的数组的实现。代码编译没有错误,但数组元素不能正确复制。它们似乎只是被擦除(用0覆盖)。尝试在数组元素上调用getter会导致段错误。

该数组包含一些基本类对象的指针;这是我的代码和我查找的示例之间的主要区别。

这是功能:

// Pointer to array of pointers
SomeClass** mainArray = new SomeClass[1];
int numItems = 0;

void AddItemDynamic(SomeClass* newVal) {
    SomeClass** tempArray = new SomeClass*[numItems+1];
    // Copying pointers to bigger array
    for (int i = 0; i < numItems - 1; i++) {
        tempArray[i] = mainArray[i];
    }

    numItems++;
    // Adding the new value
    tempArray[numItems] = newVal;

    delete [] mainArray;
    mainArray = tempArray;
}


代码应该复制数组元素,然后将指针重新分配给新创建的数组。相反,指针似乎设置为其他东西。

c++
1个回答
3
投票

如果当前数组中包含numItems元素,那么循环

for (int i = 0; i < numItems - 1; i++)

将比numItems元素复制少一个。

当你添加新元素时,你会超出新数组的范围,因为你将numItems增加到了早期。

所以在同一个函数中有两个逐个错误,每个方向一个错误。

正如a comment(感谢Ayxan)中所提到的,第一个逐个错误意味着前两次调用此函数时,复制循环将不会发生。当第一次这样做时,这实际上是好的,因为没有什么可以复制,但第二次应该有一些东西要复制,但循环(当前)不会运行。

© www.soinside.com 2019 - 2024. All rights reserved.