静态内存不能跨函数使用
来源:互联网 发布:广东管理网络干部学院 编辑:程序博客网 时间:2024/05/02 01:21
声明:本文参考郝斌老师的 C 语言自学视频。
本人是 C 语言的初学者,学习的资料来自郝斌老师的 C 语言视频教程。在学习的过程中做了些笔记,为了便于以后的复习也为了和大家共同学习。
上面的程序的运行结果是:
先解释一下本程序:
在 main() 函数中,程序将 地址变量 P 的地址发送给了f() 函数。因为变量 q 是 int ** 型的变量,所以,*q 等价于变量 p 的内容,即 *q = p。语句 *q = &i , 所代表的意义就是将变量 i 的地址发送给了地址变量 p, 而最后
printf("%d\n", *p) 这个语句要输出的 *p 则等价于变量 i 的内容了,所以,最后的输出结果是变量的内容 5 。
最后需要指出的是这个程序在语法上是没有问题的,但在逻辑上存在错误,原因如下:
系统为函数 f() 和函数 main() 分配的内存都是静态的,会在函数运行结束自动由系统将内存释放。问题就出在 main() 函数的 printf 语句,因为在语句 f(&p) 执行之后,f() 函数所分配的内存都已经被释放掉了,所以指针变量 P 所指向的变量 i 已经被释放了,也即变量 i 所在位置的变量已经不存在了。这也是为什么静态内存不能跨函数使用的原因。
0 0
- 静态内存不能跨函数使用
- 静态变量不能跨函数使用内存
- 关于“静态变量不能跨函数使用”的一个疑问
- 为什么静态函数不能使用实例字段以及实例函数
- 跨函数使用内存
- 跨函数使用内存
- 跨函数使用内存
- 静态函数为什么不能是虚函数?
- 为何gpio_to_irq不能静态使用?
- 函数不能传递动态内存
- 静态成员函数 不能访问非静态成员函数
- 静态成员函数不能访问非静态成员函数
- 跨函数使用内存问题
- 关于ACE静态库不能使用ACE_SOCK_Acceptor::accpet函数的迷思
- 静态成员函数为何不能const
- 静态函数里不能访问成员变量
- 为什么静态成员函数不能是const
- 为什么静态成员函数不能是const
- Java多线程程序设计
- 第十三周项目一 数组大折腾(4.删除长度为16整型数组中能被3整除的数)
- fatal error C1083: Cannot open precompiled header file: 'Debug/Example_VC1.pch': No such file or dir
- 给网页设计师和前端开发者看的前端性能优化
- [LeetCode]Binary Tree Inorder Traversal
- 静态内存不能跨函数使用
- 【Leetcode 题解】Min Stack
- android使用WebView来打开文件选择器(相机,相册,曲目)
- 利用javascript实现向UpdatePanel外部传值
- VS2010/MFC flexcell使用
- AFNetworking2.0请求数据时出现错误Requestfailed:unacceptablecontent-type:text/html解决方法
- 0. Qt Creator 用户界面
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
- nodejs启动守护程序pm2