C语言菜鸟求助:关于C语言中变量释放的问题

据知,根据内存分配中栈的特点,C语言中在函数调用返回时,其局部自动变量会被释放,小弟写了如下程序想看看变量在其初始化的函数结束前后的值,发现其变量还能通过指针被另外的函数... 据知,根据内存分配中栈的特点,C语言中在函数调用返回时,其局部自动变量会被释放,小弟写了如下程序想看看变量在其初始化的函数结束前后的值,发现其变量还能通过指针被另外的函数继续使用,所以想问问变量释放的具体本质是什么?是权限的收回还是简单的赋值还是?
# include <stdio.h>
int * power();
void fa(int *);
/*主函数*/
int main(void)
{
fa(power());
return 0;
}
/*定义函数*/
int * power()
{
auto int j = 1; //初始化局部自动变量
printf("j变量原地址和值:\n%d\n%d\n", &j, j);
return (&j);
}
void fa(int * j)
{
printf("j变量后地址和值:\n%d\n%d\n", j, *j); //打印
return;
}
展开
 我来答
银雯tz
2012-08-02 · TA获得超过882个赞
知道小有建树答主
回答量:1042
采纳率:0%
帮助的人:770万
展开全部
变量释放就是告诉系统你不用这块地址了,别的程序可以对那块地址进行赋值等操作,因此那块地址的值你就不可控了,即使你再对它赋值,也可能被别的程序改变,产生意想不到的结果。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxc66258
2012-08-02
知道答主
回答量:8
采纳率:0%
帮助的人:6.5万
展开全部
就是收回,但是不抹除内存内储存的值,只是告诉操作系统这个地方的内存又能用了。所以你引用指针还能看到他。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逻辑错误2021
2012-08-02 · TA获得超过757个赞
知道小有建树答主
回答量:986
采纳率:0%
帮助的人:444万
展开全部
你的 fa(int * j) 函数在使用变量 j 的时候,它的值已经被释放了.即使前面你声明的时候不用auto,打印出来的值还是有问题.这个是我些的.你看看.

#include <stdio.h>
void autoFree( int* i );
int main()
{
auto int i = 100;
printf( "%08X,%d\n", &i, i );
autoFree( &i );
return 0;
}
void autoFree( int* i )
{
printf( "%08X, %d", i, *i );
}
你可以反汇编跟踪一下,其实自动变量也是在栈里面的.忽悠人的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ecdc68a
2012-08-02 · TA获得超过343个赞
知道小有建树答主
回答量:444
采纳率:0%
帮助的人:241万
展开全部
释放就是资源的回收,但是你回收了以后这个指针就是又回来了指向随机地址了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尔迩123
2012-08-02
知道答主
回答量:6
采纳率:0%
帮助的人:6534
展开全部
就是占用地址空间的释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式