
正文
C语言函数生存期 c语言的生命周期
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
c语言函数生存期
GetMemory();
中内存分配临时变量pC语言函数生存期,函数执行完C语言函数生存期,临时变量p也被释放了。
返回的指针指向的内容可能已经被系统重新划分了。
所以显示乱码。不能这么用。
可以在外部分配内存空间,然后里面去调用处理。
#include string.h
void GetMemory(char** p)
{
strcpy(*p,"hello world");
}
void main(void)
{
char *str = new char[255];
memset(str,0,sizeof(str));
GetMemory(str);
printf(str);
delete []str;
getchar();
}
简单的说,临时变量的存在范围在 函数的{ 和 } 之间。
相关问答
Q1: C语言简单生存期问题
楼上的说的也对,还有一点就是,静态的和动态的存储位置不一样.静态的在DATA区,如果没有给初值系统以0来初始化;动态的在BSS区,没有给初始值的话值就是分配的存储单元的当前内容,对程序来说可以说是一个随机数.
主函数再特殊也是一个函数,说白了就是程序的入口地址,把他当做一般的函数就行.
Q2: c语言生存期问题
其实这3种情况变量b,也就是p所指向的对象都已经被释放C语言函数生存期了,前两次*p=5的原因是b的内存虽然被释放了,但是还没有被别的对象占用,也就是系统还没有把那块内存拿来给其C语言函数生存期他东西使用,而系统在释放掉内存后是不会改变它的值的,这样才能保证系统的运行速度,所以C语言函数生存期你*p的值还是5C语言函数生存期,但已经是不安全的使用了..而第三次C语言函数生存期你在定义int c的时候恰巧编译器又把b释放掉的内存分配给了c,所以*p的值变成10000了,但是你是不能保证编译器每次都会把b释放掉的内存分配给c的,所以这也是不安全的,你在不同的编译器上或者不同的时间多运行几次,*p得出的结果说不定都会不一样的....
补充的问题:
当你采用
char *str="Hello world";
这种的方式来对字符串指针进行分配的时候,它的动作是:
1.对"Hello world"开一段只读的内存
2.把"Hello world"的首地址,即'H'所在的地址赋给了字符串指针str
所以你是不能改变指针str所指向的内容的值的,这段内存是给系统自行维护自行释放的.... 所以当你运行它的时候它会告诉你你访问内存出错,这段内存只能为read
C语言函数生存期的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言的生命周期、C语言函数生存期的信息别忘了在本站进行查找喔。








