C语言中malloc为字符型指针分配内存引起的缓冲区泄露
/*
问题描述;
缓冲区溢出:
(1)malloc:分配一块连续的未被使用得当内存块,但是不能保证内存块临近的其他内存块也未被使用;
(2)当用malloc未char类型指针分配一个字节长度内存时,但向其中保存n个字符组成的字符串,会导致缓冲区溢出
(3)因此,最好如q一般,在初始化的时候分配足够大的内存,以防止缓冲区泄露;
(4)malloc必须要和free配套使用,否则会导致内存泄露;
(5)指针在使用完后,必须重新指向NULL;否则会变成野指针,
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *p = NULL;
char *q = NULL;
p = (char *)malloc(1*sizeof(char));
printf("value(p)= %d\n",p);
printf("value(p+1)= %d\n",p+1);
printf("*(p+1)= %c\n",*(p+1)); //可以打印出$,虽然并不知道是否被系统使用,但是p+1指向的内存中确实有数据;
gets(p);
printf("value(p)= %d\n",p); //验证:p的值仍是malloc返回的地址值,因此gets操作应该是:将数据流依次存进p指 定内存中,并未对字符串单独分配其他内存;
printf("value(p+1)= %d\n",p+1); //验证:即使p执行一个字符串,但是进行p+1运算时,地址仍然只是增加了1个字 节!
printf("value(p+2)= %d\n",p+2);
printf("value(p+3)= %d\n",p+3);
printf("value(p+4)= %d\n",p+4);
printf("value(p+5)= %d\n",p+5);
printf("*(p)= %c\n",*p);
printf("*(p+1)= %c\n",*(p+1));
printf("*(p+2)= %c\n",*(p+2));
printf("*(p+3)= %c\n",*(p+3));
printf("*(p+4)= %c\n",*(p+4));
printf("*(p+5)= %c\n",*(p+5));
printf("*(p+6)= %c\n",*(p+6));
printf("*p= %s\n",p);
q = (char *)malloc(10*sizeof(char));
printf("value(q)= %d\n",q);
printf("value(q+1)= %d\n",q+1);
printf("*(q)= %c\n",*q);
printf("*(q+1)= %c\n",*(q+1));
printf("*(q+2)= %c\n",*(q+2));
printf("*(q+3)= %c\n",*(q+3));
printf("*(q+4)= %c\n",*(q+4));
printf("*(q+5)= %c\n",*(q+5));
printf("*(q+6)= %c\n",*(q+6));
q = "hello"; //验证:q的值被更改,与malloc返回的地址值不同!!因为:"hello"是字符串常量,系统编译 时会为其分配内存空间,q重新指向字符串常量
printf("value(q)= %d\n",q);
free(p);
free(q);
p =q =NULL;
printf("Hello world!\n");
return 0;
}
C语言中malloc为字符型指针分配内存引起的缓冲区泄露相关推荐
- c语言中c为字符型便量,c='97'是否正确,C语言判断题Word版
<C语言判断题Word版>由会员分享,可在线阅读,更多相关<C语言判断题Word版(3页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击去 ...
- c语言中c为字符型便量,c='97'是否正确,计算机二级C语言 考点06 字符型常量变量...
计算机二级C语言 考点06 字符型常量变量 1.已定义c为字符型变量,则下列语句中正确的是 A)c='97'; B)c="97"; C)c=97; D)c="a" ...
- c语言输入12行怎么输入,c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入...
c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中,定义 ...
- c语言malloc作用,c语言中malloc是什么?怎么用?
c语言中malloc是什么?怎么用? malloc() 函数用来动态地分配内存空间,其原型为:void* malloc (size_t size); 说明: [参数说明] size 为需要分配的内存空 ...
- java语言中类定义数组赋值_在Java语言中,下列对于字符数组的定义并赋值正确的是(选一项)_学小易找答案...
[单选题]<茶花女--饮酒歌>这段音乐属于级进还是跳进的旋律? <茶花女-饮酒歌>.mp4 [简答题] [单选题]对外汉语教学中以系统讲授语言知识的一类课型,包括语音.词汇.语 ...
- C语言中malloc函数及free函数用法(定义动态数组及释放)
一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...
- java 英文字符 字节_3、在JAVA语言中,每个英文字符占 个字节,每个中文汉字占( )个字节。...
[判断题]中心原子中的几个原子轨道杂化时,必形成数目相同的杂化轨道. [单选题]集合 用区间表示正确的是 ( ) [单选题]15.Java语言的类间的继承关系是 [单选题]8.编译Java Appli ...
- (转)字符型指针变量与字符数组的区别
(1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符.而系统只为指针变量pc分 ...
- C语言中的void 和void 指针类型
C语言中的void 和void 指针类型 C语言, void, void指针 许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和 ...
最新文章
- 一位美女博士的人脸识别历程
- python如何做散点图-Python-如何为散点图制作动画?
- python零基础怎么学-零基础如何入门Python
- JFinal之学习资源
- UG集成显卡 显示成烂面
- oracle开放视图,Oracle视图
- MySQL 表分区 Partition
- Android 之WebView实现下拉刷新和其他相关刷新功能
- 深度学习面试的一些知识
- 关于JavaScript中return的使用情况
- 同时使用SVN和Git进行版本控制
- 干货 | Spark Streaming 和 Flink 详细对比
- 商汤科技推出SenseCore AI大装置,打造物理世界的搜索引擎
- nginx中的sub_filter
- java毕业设计基于的高校教室申请管理系统mybatis+源码+调试部署+系统+数据库+lw
- 新手学Python要打好哪些基础?从软件安装到全面基础讲解,就它了
- 用vue实现按字母排序的多选列表功能类似通讯录
- python可视化界面
- js 排序,push,pop,shit,unshit(),splice(),随机打乱数组,随机方法总结
- 意外被裁,逆境中意外面过阿里3+1,成功拿下阿里Java岗P6 offer