0

我正在尝试重新分配对象数组,但出现分段错误。

这是代码:

数组.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;
        }

    }

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

4

1 回答 1

1

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

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

于 2013-09-22T15:58:58.400 回答