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

C++ 实现动态大小的数组时出现问题,c++,C++,我正在编写一个动态大小数组的实现。代码编译时没有错误,但数组元素复制不正确。它们似乎刚刚被删除(被0覆盖)。试图调用数组元素上的getter会导致segfault 数组包含指向一些基本类对象的指针;这是我的代码和我查找的示例之间的主要区别 这就是功能: // Pointer to array of pointers SomeClass** mainArray = new SomeClass[1]; int numItems = 0; void AddItemDynamic(SomeClass*

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

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

这就是功能:

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


//指向指针数组的指针
SomeClass**mainArray=新的SomeClass[1];
int numItems=0;
void AddItemDynamic(SomeClass*newVal){
SomeClass**tempArray=新的SomeClass*[numItems+1];
//将指针复制到更大的数组
对于(int i=0;i

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

如果当前数组中有
numItems
元素,则循环

for (int i = 0; i < numItems - 1; i++)
for(int i=0;i
将复制少于
numItems
元素的一个元素

当您添加新元素时,您超出了新数组的范围,因为您将
numItems
增加到了early

因此,在同一个函数中,两个错误一个接一个,每个方向一个


如(感谢Ayxan)中所述,第一个off by一个错误意味着调用此函数的第一次两次,复制循环不会发生。第一次这样做其实很好,因为那时没有什么可复制的,但是第二次应该有可复制的东西,但是循环(当前)不会运行。

SomeClass**mainArray=newsomeclass[1]你想在这里做什么?为什么不使用向量?为什么要创建指针数组而不是普通数组?实现异常安全且健壮的动态容器比你想象的要困难。幸运的是,标准库提供了<代码> STD::代码> STD::DEQu< /Cube >和其他被彻底测试和优化的容器。正如其他人所提到的,C++标准库中已经有了“动态数组”,因此只用于练习或赋值,学习它。然后扔掉它。考虑到
numItems
初始化为零,它可能会变成负数,循环体也会一起跳过。因此数组中的所有值都是零。感谢您的明确响应,这正是问题所在。未正确阅读而复制粘贴代码的结果;吸取的教训。