堆和栈的一些小疑问
来源:互联网 发布:用友软件u8下载 编辑:程序博客网 时间:2024/05/29 04:36
今天在课堂上的时候老师给出了下面一段程序,要求我们分析程序会出现什么问题:
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char i[12] = "qweqqqewwwqq"; functionA(i); printf("OK"); return 0;}//strcpy(char* a,const char* b)//函数要求a中要有足够的空间存储b中的字符串void functionA(char *i){ char j[5] ="qqqqw"; strcpy(j,i); return;}
该程序编译运行后程序会崩溃。具体原因是因为strcpy(a,b)函数要求a中拥有足够的空间存储b中的字符串。
strcpy(a,b)函数是将b中的字符串拷贝到a中,不管a中是否有足够的空间。
当b中的字符串大于a中的空间时,程序会继续往b后的空间写入a的字符串。这时就会在不合法的内存位置写入。导致程序"跑飞"。
堆和栈中的存储内容
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可
执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈
的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地
址,也就是主函数中的下一条指令,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。
- 堆和栈的一些小疑问
- OC中方法的一些小疑问
- 对于@RequestParam的一些小疑问
- float型和int 的小疑问
- ValueObject和DTO模式的一些疑问
- pcap_loop的一些用法和疑问
- cuda的一些注意和疑问
- 验证for和boolean的一些疑问
- 一些疑问和思考
- ADF Faces 小疑问+ADF调用JS的一些方法
- 关于Python中HTMLParser使用的一些小疑问
- 堆和栈的区别小总
- JS 栈和堆的小思考
- 堆和栈的一些知识
- 小的疑问
- 抓取的一些疑问
- Nosql的一些疑问
- dynamic_cast的一些疑问
- 如何打一个rpm包
- maven创建Myeclipse2013 web项目
- 130902 recommendation system
- hdoj 1045 Fire Net 直接枚举 模拟就好了
- 约瑟夫问题总结及代码实现
- 堆和栈的一些小疑问
- 超越竞争对手的秘密武器-技术重用
- QT 的信号与槽机制介绍
- 编译 50 字节代码耗费 4G 内存
- AC自动机算法详解
- C++和Java有什么不同
- redis-2.6.16源码分析之pub-sub系统
- oracle中的distinct关键字的用法和效果
- ubuntu 命令