我在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 *
数组。N
是int
成员变量,用于计算下一个开放索引。size
是一个int
成员变量,用于跟踪数组大小。答案 0 :(得分:0)
假设N
的大小为s
(或以某种方式与之相关)且N
大于`capacity,此行:
for (int i = 0; i < N; i++) {
copy[i] = s[i];
}
在copy
结尾之后写入内存。超出数组末尾的写入是一个错误。