在 c++ 中手动重新分配对象数组

Manually reallocating array of objects in c++

本文关键字:分配 对象 数组 新分配 c++      更新时间:2023-10-16

我正在尝试重新分配对象数组,但是我遇到了分段错误。

这是代码:

Array.h

class Array
{
private:
    int * _Array;
    int length;
    int id;
    Array(int size, bool insert);
    static Array** allsArrays;
    static size_t sizeAll;
    static int amountOfArrays;
public:
    Array();
    Array(int size);
    Array(const Array& source); 
};

阵列.cpp

int Array::amountOfArrays=0;
size_t Array::sizeAll=10;
Array** Array::allsArrays= new Array*[sizeAll];
Array Array::intitialsArray(0, false);
//constructor
Array::Array(int size, bool insert)
{
    if(size != 0)
    {
       sArray = new int [size];
        for(int i=0; i<size; i++)
        {
            sArray[i]=0;
        }
    }
    else
        sArray = NULL;
    length = size;
    id=0;
    if(insert == true)
    {
        insertToAllsArr(*this);
        amountOfArrays++;
        id = amountOfArrays;
    }
}

//the part that crashes, part of insertToAllsArr function
    //realloc
    if(sizeAll < amountOfArrays)
    {
        int oldSize=sizeAll;
        sizeAll += 10;
        Array **tmp=new Array*[sizeAll];
        for( i=0;i<(int)sizeAll;i++)
        {
           *tmp = &intitialsArray;
            if(i < oldSize)
            {
                 *tmp = *allsArrays;
                 ++allsArrays;
            }
            ++tmp;
        }
        for(i=0; i< (int)sizeAll ; i++ ,--tmp);
        for(i=0 ; i< oldSize ; i++, --allsArrays);
        allsArrays= new Array*[sizeAll];
        for( i=0;i<(int)sizeAll;i++)
        {
            *allsArrays = *tmp;
            ++allsArrays;
            ++tmp;
        }
    }

当我尝试从另一个函数访问 allArray 时,我遇到了分段错误。我做错了什么?(对于那些可能会问为什么我不使用 std 的人,我不能因为我的复制构造函数)谢谢。

您正在递增allsArrays并且显然没有将其重置回其原始值。您在第一个循环中执行此操作,但在第二个循环中没有这样做(似乎)。

这是非常丑陋的代码。我会想清理一下。你不需要两个循环来将值从一个数组复制到另一个数组,你不需要一个tmp数组,你不需要像这样弄乱指针增量。您还希望至少有两个内存泄漏。