问:下面代码有问题吗?如果有,该怎么修改?
#include<stdio.h>
int* inc(int val)
{
int a = val;
a++;
return &a;
}
int main(void)
{
int a = 10;
int *val = inc(a);
printf("\n Incremented value is equal to [%d] \n", *val);
return 0;
}
答:尽管上面的程序有时候能够正常运行,但是在“inc()”中存在严重的漏洞。
这个函数返回本地变量的地址。因为本地变量的生命周期就是“inc()”的生命周期,
所以在inc结束后,使用本地变量会发生不好的结果。这可以通过将main()中变量“a”的
地址来避免,这样以后还可以修改这个地址存储的值。
|