// 初始化函數
int InitStack(SqStack &S) {
S.base = new int[MAX];
if (!S.base) return 0;
S.base = S.top; // 錯誤:將 base 賦值給 top,導致 top 丟失堆內存地址
S.stacksize = MAX;
return 1;
}
S.base 指向新分配的堆內存起始地址。正確邏輯應令 S.top 指向棧頂(初始等於棧底 S.base)。原代碼反向賦值導致:
S.top 保持未初始化的垃圾值。Push/Pop 判斷 S.top - S.base 邏輯完全失效。new int[MAX] 分配的地址被覆蓋,無法 delete[]。int InitStack(SqStack &S) {
S.base = new int[MAX];
if (!S.base) return 0;
S.top = S.base; // 正確:棧頂指針指向棧底
S.stacksize = MAX;
return 1;
}
base 固定不動,top 隨入棧/出棧移動。std::vector 或 std::stack 替代手動內存管理(C++ 環境)。