在 c++ 中手动重新分配对象数组
Manually reallocating array of objects in c++
我正在尝试重新分配对象数组,但是我遇到了分段错误。
这是代码:
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数组,你不需要像这样弄乱指针增量。您还希望至少有两个内存泄漏。
相关文章:
- 使用操作重载对象重新分配对象
- 静态分配对象的值初始化
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 堆分配对象中的堆栈对象在 c++ 中在哪里分配?
- 在 c++ 的构造函数中分配对象向量时出错
- 动态分配对象中的字段-动态分配更好还是静态分配更好?C++
- 操作后通过运算符分配对象
- 如何捕获源自静态分配对象的构造函数的异常?
- 在C++中,当重新分配对象时,为什么构造函数在析构函数之前触发?
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 将动态分配对象传递到 boost::any 构造函数中
- 混合指向已分配对象和作用域对象的指针
- C 删除指向动态分配对象的指针
- 有关动态分配对象的问题
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态
- C++ 中的黑白堆分配对象和堆栈分配对象的性能差异
- 是隐式创建的默认构造函数,负责分配对象内存
- 如何删除用于动态分配对象的智能指针
- 分配对象数组时如何初始化每个对象
- 用于堆栈分配对象的C++虚拟析构函数内联