我目前正在尝试实现自己的堆栈版本,这将是一个包含结构的数组。这是代码:
struct some_struct{
std::string name;
};
ExStack::ExStack(){
cout << "Please enter a capacity for the stack: ";
cin >> capacity;
stack = new some_struct[capacity];
size = 0;
}
void ExStack::create_new_array(some_struct item){
size ++;
if (size == capacity){
some_struct* new_stack = new some_struct[2 * capacity];
for (int i = 0; i < size; i++){
cout << stack[i];
new_stack[i] = stack[i];
}
delete[] stack;
stack = new_stack;
capacity *= 2;
delete[] new_stack;
}
出于调试目的,我目前正在输入10
以获取ExStack的容量,然后调用create_new_array直到size == capacity
。但是,我的代码在进入for循环时崩溃,因为它尝试将所有内容复制到新堆栈并删除旧堆栈。有什么想法吗?
答案 0 :(得分:2)
您正在删除在功能结束时创建的新堆栈。
delete[] new_stack;
你只需要delete[] stack;
来摆脱旧记忆。您需要保留在new_stack
中分配的新内存。