【发布时间】:2021-06-28 21:06:44
【问题描述】:
我正在尝试使用动态数组来实现堆栈:
class stackArray{
public:
stackArray(){mainArr = new int[arrSize];}
void push(int data){
if(curr > arrSize){
int *newArr = new int[arrSize*2];
for(int i = 0 ; i < arrSize; ++i){
newArr[i] = mainArr[i];
}
arrSize *= 2;
delete []mainArr;
mainArr = newArr;
}
mainArr[++curr] = data;
}
void print(){ // debug
for(int i = 0; i < arrSize; ++i){
std::cout << mainArr[i];
}
std::cout << std::endl;
}
private:
int *mainArr;
int curr = -1;
int arrSize = 10;
};
由于某种原因,每当curr > arrSize 为真并分配一个名为newArr 的新内存时,它就会产生malloc(): corrupted top size。我还是动态内存的新手,我不明白这个错误。任何人都可以解释它以及如何解决这个问题?
【问题讨论】:
-
提示:使用
std::copy之类的东西来代替这个。 -
在调试器中逐步检查以了解更多信息。
-
你把数组的大小加倍,但不要改变
arrsize这迟早会咬人的。 -
调整大小时是否更新
arrSize? -
是的,错误仍然存在。请记住,C++ 中的数组原点为零。在 0 和
arrSize-1 之间有效。
标签: c++ class dynamic-memory-allocation