栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

返回本地变量可能会犯错

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

返回本地变量可能会犯错

#include 
int* f(void);
void g(void);

int main(int argc,char const *argv[])
{
	int *p = f();//得到f函数返回的指针 
	printf("*p=%dn",*p);
	g();
	printf("*P=%dn",*p);
	
	return 0;
}
int* f(void)
{
	int i=12;
	return &i;
}
void g(void)
{
	int k=24;
	printf("k=%dn",k);
}

这个值进入栈,然后出栈了,下一个值占用了这个栈里面的位置,*p的地方原来叫i是12,当出了函数,这个地方虽然还是12的形式,但是已经不叫i了,下一个函数重新得到了这块空间,并把这个地方叫做k,然后把这个地方的12删掉,写成24.

所以返回本地变量的地址是危险的,返回全局变量或者静态变量的地址是安全的,返回在函数内的malloc的内存是安全的,但容易造成问题,最好的做法是返回传入的指针。

但还是要尽量不要使用全局变量在函数间传递参数和结果,尽量避免使用全局变量,使用全局变量和静态本地变量的函数是线程不安全的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号