/*
问题描述;
缓冲区溢出:
(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为字符型指针分配内存引起的缓冲区泄露相关推荐

  1. c语言中c为字符型便量,c='97'是否正确,C语言判断题Word版

    <C语言判断题Word版>由会员分享,可在线阅读,更多相关<C语言判断题Word版(3页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击去 ...

  2. c语言中c为字符型便量,c='97'是否正确,计算机二级C语言 考点06 字符型常量变量...

    计算机二级C语言 考点06 字符型常量变量 1.已定义c为字符型变量,则下列语句中正确的是 A)c='97'; B)c="97"; C)c=97; D)c="a" ...

  3. c语言输入12行怎么输入,c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入...

    c语言中,定义什么型别的变数能同时储存数字跟字元,怎么输入以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中,定义 ...

  4. c语言malloc作用,c语言中malloc是什么?怎么用?

    c语言中malloc是什么?怎么用? malloc() 函数用来动态地分配内存空间,其原型为:void* malloc (size_t size); 说明: [参数说明] size 为需要分配的内存空 ...

  5. java语言中类定义数组赋值_在Java语言中,下列对于字符数组的定义并赋值正确的是(选一项)_学小易找答案...

    [单选题]<茶花女--饮酒歌>这段音乐属于级进还是跳进的旋律? <茶花女-饮酒歌>.mp4 [简答题] [单选题]对外汉语教学中以系统讲授语言知识的一类课型,包括语音.词汇.语 ...

  6. C语言中malloc函数及free函数用法(定义动态数组及释放)

    一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...

  7. java 英文字符 字节_3、在JAVA语言中,每个英文字符占 个字节,每个中文汉字占( )个字节。...

    [判断题]中心原子中的几个原子轨道杂化时,必形成数目相同的杂化轨道. [单选题]集合 用区间表示正确的是 ( ) [单选题]15.Java语言的类间的继承关系是 [单选题]8.编译Java Appli ...

  8. (转)字符型指针变量与字符数组的区别

    (1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符.而系统只为指针变量pc分 ...

  9. C语言中的void 和void 指针类型

    C语言中的void 和void 指针类型 C语言, void, void指针 许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和 ...

最新文章

  1. 一位美女博士的人脸识别历程
  2. python如何做散点图-Python-如何为散点图制作动画?
  3. python零基础怎么学-零基础如何入门Python
  4. JFinal之学习资源
  5. UG集成显卡 显示成烂面
  6. oracle开放视图,Oracle视图
  7. MySQL 表分区 Partition
  8. Android 之WebView实现下拉刷新和其他相关刷新功能
  9. 深度学习面试的一些知识
  10. 关于JavaScript中return的使用情况
  11. 同时使用SVN和Git进行版本控制
  12. 干货 | Spark Streaming 和 Flink 详细对比
  13. 商汤科技推出SenseCore AI大装置,打造物理世界的搜索引擎
  14. nginx中的sub_filter
  15. java毕业设计基于的高校教室申请管理系统mybatis+源码+调试部署+系统+数据库+lw
  16. 新手学Python要打好哪些基础?从软件安装到全面基础讲解,就它了
  17. 用vue实现按字母排序的多选列表功能类似通讯录
  18. python可视化界面
  19. js 排序,push,pop,shit,unshit(),splice(),随机打乱数组,随机方法总结
  20. 意外被裁,逆境中意外面过阿里3+1,成功拿下阿里Java岗P6 offer

热门文章

  1. 《深入理解java虚拟机》笔记2——GC算法与内存分配策略
  2. ReentrantLock实现原理深入探究
  3. git merge --squash改写提交
  4. Java虚拟机学习(3): 类加载机制
  5. 解析IntelliJ IDEA内部设计
  6. Java 动态代理机制分析及扩展,第 1 部分
  7. javaweb学习总结(三十一)——国际化(i18n)
  8. 撰写英文SCI文章的技巧
  9. 方差/标准差/四分位数/z-score公式
  10. 易天光通信ETU 25G SFP28光模块规格参数