返回本地变量可能会犯错

返回本地变量可能会犯错,第1张

返回本地变量可能会犯错
#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的内存是安全的,但容易造成问题,最好的做法是返回传入的指针。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5502216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存