在旧数组已满时创建新数组时遇到问题

时间:2015-05-09 01:53:00

标签: c++ arrays

我目前正在尝试实现自己的堆栈版本,这将是一个包含结构的数组。这是代码:

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循环时崩溃,因为它尝试将所有内容复制到新堆栈并删除旧堆栈。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您正在删除在功能结束时创建的新堆栈。

delete[] new_stack;

你只需要delete[] stack;来摆脱旧记忆。您需要保留在new_stack中分配的新内存。