【发布时间】:2016-06-09 23:22:37
【问题描述】:
我有一个使用标准容器vector、pair 和stack 的程序。我有一个std::pair 类型的向量数组,其元素被推送到std::stack。我有一个打印三个堆栈内容的函数,其中两个是空的。第一个堆栈打印正常,但最初作为空传递的其他两个堆栈导致 Visual Studio 抛出错误:
抛出异常:读取访问冲突。 _Parent_proxy 是 0xCCCCCCCC。
错误出现在xutility的第165行。
当其他两个堆栈中的任何一个为空或非空时,就会发生这种情况。我不知道是什么导致了这个问题,因为第一个堆栈工作正常,但随后的两个堆栈导致程序崩溃。
在 main.cpp 文件中:
void stackPrint(stack<pair<int, char>> _stack) {
stack<pair<int, char>> temp_stack;
for (auto i = _stack; !i.empty(); i.pop())
temp_stack.push(i.top());
while(!temp_stack.empty()) {
cout << temp_stack.top().first << ", ";
temp_stack.pop();
}
}
void print(stack<pair<int, char>>* _stack) {
cout << "Stack A: ";
stackPrint(_stack[0]); // function call executes successfully and stackPrint functions properly
cout << "B: ";
stackPrint(_stack[1]); // xutility error happens here at function call, stackPrint never invoked
cout << "C: ";
stackPrint(_stack[2]); // same here if B is commented out
}
int main() {
stack<pair<int, char>> stackA, stackB, stackC;
int num = 5;
vector<pair<int, char>> stack_elements(num);
for (int i = num - 1; i >= 0; i--) {
stack_elements[i].first = i;
stack_elements[i].second ='A';
stackA.push(stack_elements[i]);
}
//stackB.push(stack_elements[1]);
//stackC.push(stack_elements[1]);
stack<pair<int, char>>* stack_array[] = {&stackA, &stackB, &stackC};
print(*stack_array);
return 0;
}
【问题讨论】:
标签: c++ pointers exception stack containers