为什么这个数组大小调整代码仅在增加时才起作用,而不是在减少?

时间:2014-03-12 20:33:54

标签: c++

我在C ++中实现了Stack实现。在another question中,有人说此功能resize()仅在capacity大于size时才有效。我测试了它,这是真的。如果capacity小于或等于size,则程序会崩溃。

我似乎无法意识到导致它崩溃的原因。有人可以对此有所启发吗?

template <class Type>

void Stack<Type>::resize(int capacity) {
    if(capacity > MAX_SIZE)
        capacity = MAX_SIZE;

    Type* copy = new Type[capacity];

    for (int i = 0; i < N; i++) {
        copy[i] = s[i];
    }

    delete [] s;
    s = copy;
    size = capacity;
}
  • s是一个Type *数组。
  • Nint成员变量,用于计算下一个开放索引。
  • size是一个int成员变量,用于跟踪数组大小。

1 个答案:

答案 0 :(得分:0)

假设N的大小为s(或以某种方式与之相关)且N大于`capacity,此行:

for (int i = 0; i < N; i++) {
    copy[i] = s[i];
}

copy结尾之后写入内存。超出数组末尾的写入是一个错误。