你好,请问这个程序出问题的原因是什么

你好,请问这个程序出问题的原因是什么

尝试了一下直接返回(a+b)的地址,但是却失败了,可以指点我这是什么原因吗?谢谢


#include<iostream>

using namespace std;

//定义求和指针函数

int* add(int a,int b);

int main()

{

//定义变量

int i,j;

cin>>i>>j;

cout<<"指针函数返回的地址指向的内存数据为:"<<*(add(i,j))<<endl;

    

//调用求和函数,输出两个变量和


return 0;

}


int* add(int a,int b)

{

    

    return &(a+b);

}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好,add函数中并没有将a+b的值存放到某一个空间里,因此这里的&符号其实是找不到地址的,系统报错。修改成下面的代码就不会报error错误了:

int* add(int a,int b)

{

    int sum = a+b;

    return &sum;

}

但是不建议同学这么用,这样会报一个warning错误,因为sum是函数内部定义的一个变量,这个空间是暂时的,在有些涉及到自动释放内存空间的系统中当函数执行完毕或者代码执行结束后,该变量空间会被释放。

如果解决了你的问题,请采纳,祝学习愉快~

  • 请叫我deeply 提问者 #1
    谢谢助教老师。那此处a+b的值是存放在哪里了呢?还有,在sum的定义前加个static应该就没问题了吧
    2018-03-23 15:16:17
  • imooc_澈 回复 提问者 请叫我deeply #2
    这里只是进行了运算,return a+b的话就直接返回了运算结果,并没有存储,除非你在函数定义了变量用来接收这个返回的结果。 另外sum前加了static并不能解决这样的隐患,尽量不这么用就好了。
    2018-03-23 17:20:04
  • 请叫我deeply 提问者 回复 imooc_澈 #3
    好的。那么为了解决这种隐患,通常有哪些方法呢?
    2018-03-23 19:36:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
C++零基础入门 热门编程语言 二级考试必备
  • 参与学习       529    人
  • 提交作业       110    份
  • 解答问题       594    个

无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师