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;
} 展开
# 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;
} 展开
5个回答
展开全部
变量释放就是告诉系统你不用这块地址了,别的程序可以对那块地址进行赋值等操作,因此那块地址的值你就不可控了,即使你再对它赋值,也可能被别的程序改变,产生意想不到的结果。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是收回,但是不抹除内存内储存的值,只是告诉操作系统这个地方的内存又能用了。所以你引用指针还能看到他。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的 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 );
}
你可以反汇编跟踪一下,其实自动变量也是在栈里面的.忽悠人的.
#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 );
}
你可以反汇编跟踪一下,其实自动变量也是在栈里面的.忽悠人的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
释放就是资源的回收,但是你回收了以后这个指针就是又回来了指向随机地址了,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询