指针函数,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
近日学习指针函数,写了一个测试,遇到一些小问题,代码如下:
#include<iostream>
using namespace std;
int *get_sum(int a, int b)
{
int *c ;
*c = a+b;
return c;
}
int main()
{
int *p2;
p2 = get_sum(4,5);
cout<< *p2 <<endl; // p2得到了get_sum中c的指针,但是函数作用域结束,
// 指针c已经被销毁,p2成为了野指针。
return 0;
}
程序可以编译通过,乍一看,get_sum函数返回的是指针c,指针c指向的地址上存有a+b的值,那么程序输出的结果应该是9,但真正运行程序却出现了Segmentation fault (core dumped)。
事实上这样写是有问题的,在get_num函数中定义了指针c,并生成了指针c指向的内容为a+b的值。但是当函数运行结束后,虽然指针的值返回了,但指针指向地址上的内容被消除了,所以p2得到了c的值,但他指向的内容被释放了。此时p2成为了野指针。
分享一下遇到的坑,这样的问题小伙伴们以后也可以注意一下。