int main()
{printf("\n");//第一个printfchar *mem = malloc(sizeof (char)*16);memcpy(mem,"hellodddddddddddd",123);printf("\n");//第二个printfreturn 0;
}

意外发现,当memcpy越界时,运行代码不会崩溃,此时没有写两个 ‘printf’函数,,当添加第二个printf函数,关闭第一个printf时,代码运行到第二个printf 就会崩溃;当“开启”两个prinf时,代码不会崩溃。

崩溃时,gdb bt命令查看结果:

发现,printf 内部有执行 _int_malloc,怀疑printf会在堆栈 申请内存 导致与越界拷贝的数据冲突,因为崩溃。如此判断,还因为memcpy(mem,"hellodddddddddddd",123);  改拷贝数量改小 到一定程度,有时会不崩溃。 (暂无法深究)

printf确实会使用malloc(堆区的内存)内存:如图 前三个aabbcc 是 保存到内存的,当执行printf时,4320 位置 的内存 会保存prinff输出的内容,oa为换行符。

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char **s =  malloc(sizeof (char)*3);memset(s,0,sizeof (char)*3);for(int i= 0;i<3;i++){s[i] = malloc(sizeof (char)*10);}for(int i= 0;i<3;i++){memcpy(s[i],"aaabbb",6);}printf("\n");for(int i= 0;i<3;i++){printf("%s\n",s[i]);}for(int i= 0;i<3;i++){free(s[i]);}free(s);printf("bye!\n");return 0;
}

可能不是printf的原因,越界时,程序崩溃好像时随机的,比如我又遇到了这样的:在大括号处崩溃了

要明白的一个点:越界发生的时刻,程序并不会立马崩溃,可能会随机在某行代码处崩溃。比如上述的memcpy越界

参考:越界踩坑这几篇文章

c学习-收藏48-02_吃不饱、力不足的博客-CSDN博客

c学习-- memcpy 越界56相关推荐

  1. memcpy越界引起的segment fault

    memcpy(dst, src, size); 如果size过大,dst或者src指向的内存空间申请过小的话,就会导致memcpy越界访问,导致segment fault.

  2. Maven学习总结(56)—— Maven、Gradle 、 Ant 哪一个构建工具最适合你?

    前言 根据相关报告,大多数 Java 开发人员使用 Maven 作为他们的主要构建工具,在 67% 的受访者中.排名第二和第三的分别是 20% 的 Gradle 和 11% 的 Ant.这三个构建工具 ...

  3. 2020Y学习归纳成长56

    +*** <周期>{战略} 霍华德//霍华德.马克思//周期感越好投资做的越好:投资最重要的事情//我们在周期中什么位置,以及应对办法:(9 大周期) 1.认识周期(一组事件按照特定顺序发 ...

  4. C 源码学习——memcpy函数

    #include <cruntime.h> #include <string.h>#pragma function(memcpy) /* memcpy()用来拷贝src所指的内 ...

  5. Go 学习笔记(56)— Go 第三方库 sqlx (操作数据库)

    1. 安装数据库 在 Go 标准库中是没有数据库驱动,只提供了驱动接口,有很多第三方实现了驱动,以下两种选择我们都可以进行操作,在本文中选择 sqlx . 第三方库 MySQL 驱动库: go-sql ...

  6. Java学习总结:56(Stack子类)

    Stack子类 Stack表示栈操作,栈也是一种动态对象数组,采用的是一种先进后出的数据结构形式,即在栈中最早保存的数据最后才会取出,而最后保存的数据可以最先取出.Stack类的定义如下: publi ...

  7. Qt学习之路(56): 二进制文件读写

    今天开始进入 Qt 的另一个部分:文件读写,也就是 IO.文件读写在很多应用程序中都是需要的.Qt 通过 QIODevice 提供了IO的抽象,这种设备(device)具有读写字节块的能力.常用的IO ...

  8. Docker学习总结(56)——Docker-compose 基础知识温习

    一.Docker-compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Compose将所管理的容器分为三层,分别 ...

  9. Linux学习总结(56)——如何处理阿里云服务器上入侵的kdevtmpfsi 挖矿病毒

    1.首先停掉kdevtmpfsi的程序

最新文章

  1. C/C++:sizeof('a')的值为什么不一样?
  2. I2C总线之(三)---以C语言理解IIC
  3. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...
  4. java回调函数的生命_Java的回调函数 - choaklin 的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. OSChina 周四乱弹 —— 电脑上都有监视器
  6. 高清图片免费下载网站
  7. NETCTOSS代码实现第二版
  8. matlab解三次方程,并且输出图像
  9. 看了这些 Go2 错误处理的提案,我真的会谢
  10. 目前的云计算,主要存在的问题有哪些?
  11. ESLint 格式化程序
  12. 腾讯云服务器性能评测:配置参数16核 32G 28M
  13. 计量广义差分操作过程_计量学堂 | 计量经济学最基本的31个问题
  14. 北京国家会计学院聂兴凯:用友BIP事项会计助力企业迈入智能会计时代
  15. Zabbix监控系统的搭建
  16. linux查看某个ip流量--思路一例
  17. find grep联合搜索
  18. 微信公众号开发 接口配置信息 配置失败
  19. Acne Scarring Treatment
  20. dell主板40针开机针脚_戴尔 OptiPlex 390 790 990主板34针前置 面板针脚 接口定义

热门文章

  1. 公司注册需要什么资料?
  2. java.sql.SQLRecoverableException:Io 异常: Connection reset
  3. 在Hyper-V中如何加域,设置共享文件夹,添加管理权限,以Windows Server2022为例
  4. 海康工业相机SDK+OpenCV实例(1):海康SDK和OPENCV的安装与编译
  5. python怎么输出数组全部数据_Python打印输出数组中全部元素
  6. path r'c test.html',rtorrent使用方法
  7. netcore 上传文件
  8. 机房收费系统——颗粒归仓
  9. python的dropna_python--data.dropna
  10. 26岁才学java_26岁学java编程晚不晚