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

时间:2013-09-22 15:52:37

标签: c++ arrays

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

这是代码:

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

};

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

    }

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

1 个答案:

答案 0 :(得分:1)

您正在递增allsArrays并且显然没有将其重置为原始值。你是在第一个循环中完成的,而不是在第二个循环中(似乎)。

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