gpt4 book ai didi

c++ - 段错误将引用作为函数参数传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:25 25 4
gpt4 key购买 nike

在这段代码中,我在尝试将堆栈引用传递给 transferStacks() 方法时遇到了段错误。任何有助于理解为什么会这样的帮助!

我可以去掉辅助方法,它应该可以工作,但我试图从概念上理解。

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;

void transferStacks(stack<int> & s1, stack<int> & s2){
if (s1.empty()){
for (int i = 0; i < s2.size(); i++){
int element = s2.top();
s1.push(element);
s2.pop();
}
}
}

int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int queries = 0;
cin>>queries;

stack <int> newestOnTop;
stack <int> oldestOnTop;

while (queries!=0){
int type = 0;
cin >> type;
int input = 0;
if (type == 1){ //enqueue
cin>>input;
newestOnTop.push(input);
}
else if (type == 2){ //dequeue
transferStacks(newestOnTop, oldestOnTop);
oldestOnTop.pop();
}
else if (type == 3){ //peek
transferStacks(newestOnTop, oldestOnTop);
cout<<oldestOnTop.top()<<endl;
}
queries--;
}
return 0;
}

段错误

最佳答案

您似乎相信此代码会将 s2 复制到 s1:

    for (int i = 0; i < s2.size(); i++){
int element = s2.top();
s1.push(element);
s2.pop();
}

但它不会:如果在循环之前 s2 包含 3 个元素,则只会复制前 2 个(通常只会复制前半部分)。

此外,您的transfer 函数将 s2 传输到s1,但是您 call 它意味着您打算相反:从s1 转移到s2。当前代码会将 oldestOnTop 留空,这将在您使用 oldestOnTop.top()oldestOnTop.pop() 时导致崩溃。

关于c++ - 段错误将引用作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57129896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com