为什么这段实现数值交换的C++ swap函数代码会输出垃圾值
问题背景
要求输入两个数字并交换二者数值后打印交换结果。无需自行处理打印逻辑,相关逻辑已预先实现,仅需完成给定函数的编写即可,函数定义如下:
pair <int, int> swap(pair <int, int> swapValues) { int c; c=swapValues.first; swapValues.first=swapValues.second; swapValues.second=c; cout<<swapValues.first<<" "<<swapValues.second<<" "; }
输出垃圾值的原因
- 核心问题:该函数声明的返回值类型为
pair<int, int>,但函数执行完交换逻辑后没有添加return swapValues;语句返回处理后的pair对象,这属于C++标准定义的未定义行为,函数返回值对应的内存区域会是随机的脏数据。题目预先实现的打印逻辑会读取该函数的返回值输出,最终打印的就是垃圾值。 - 附加问题:题目明确要求无需自行实现打印逻辑,代码中额外添加的
cout语句还存在字符串字面量非法拆分的语法问题,也可能进一步导致输出异常。
修正后的正确代码
pair <int, int> swap(pair <int, int> swapValues) { int temp = swapValues.first; swapValues.first = swapValues.second; swapValues.second = temp; // 按要求返回交换后的对象即可,无需自行打印 return swapValues; }
内容的提问来源于stack exchange,提问作者Himanshu Mishra
相关产品推荐
相关产品推荐

