函数的错误应用导致的致命错误(一)——strcpy

2023-10-26




        对一个coder来说,记录一些自己所遇到的错误及解决方法是很重要的,写此系列博文,以备后用,也希望对大家有所帮助。


下面是我在调试一个程序是碰到的错误:

错误log:

F/libc    ( 7081): @@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree 
F/libc    ( 7081): Fatal signal 11 (SIGSEGV), thread 7130 (UnityMain) 
I/DEBUG   ( 3309): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG   ( 3309): Build fingerprint: 'google/mantaray/manta:4.3/JWR66V/737497:user/release-keys' 
I/DEBUG   ( 3309): Revision: '8' 
I/DEBUG   ( 3309): pid: 7081, tid: 7130, name: UnityMain  >>> com.jellk.cityrun3d2 <<< 
I/DEBUG   ( 3309): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad 
I/DEBUG   ( 3309): Abort message: '@@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree' 
I/DEBUG   ( 3309):     r0 00000027  r1 71c5e8e0  r2 00000008  r3 deadbaad 
I/DEBUG   ( 3309):     r4 00000000  r5 75969584  r6 40058000  r7 736ab1b0 
I/DEBUG   ( 3309):     r8 72000e10  r9 73ba887c  sl 72000e10  fp 00000000 
I/DEBUG   ( 3309):     ip 00000001  sp 75969580  lr 4008cd7b  pc 4008a2e4  cpsr 600f0030 
I/DEBUG   ( 3309):     d0  2064657373617064  d1  736572646461206c 
I/DEBUG   ( 3309):     d2  64646120726f2066  d3  20666f2073736572 
I/DEBUG   ( 3309):     d4  612e312d3264336e  d5  2f6b6361625f6b70 
I/DEBUG   ( 3309):     d6  622f737465737361  d7  2f617461442f6e69 
I/DEBUG   ( 3309):     d8  0000000000000000  d9  0000000000000000 
I/DEBUG   ( 3309):     d10 0000000000000000  d11 0000000000000000 
I/DEBUG   ( 3309):     d12 0000000000000000  d13 0000000000000000 
I/DEBUG   ( 3309):     d14 0000000000000000  d15 0000000000000000 
I/DEBUG   ( 3309):     d16 000000010628d803  d17 0000000000000001 
I/DEBUG   ( 3309):     d18 0000000000000001  d19 fb30000000000000 
I/DEBUG   ( 3309):     d20 fb30000000000025  d21 0000000000000001 
I/DEBUG   ( 3309):     d22 0000000000000061  d23 0000000000000001 
I/DEBUG   ( 3309):     d24 0000000000000000  d25 0000000000000fff 
I/DEBUG   ( 3309):     d26 00000000000000d0  d27 00000000000000d0 
I/DEBUG   ( 3309):     d28 0000007633533000  d29 00000076335330d0 
I/DEBUG   ( 3309):     d30 0000000000000001  d31 0000000000000001 
I/DEBUG   ( 3309):     scr 80000010 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): backtrace: 
I/DEBUG   ( 3309):     #00  pc 0001e2e4  /system/lib/libc.so 
I/DEBUG   ( 3309):     #01  pc 0001c4cc  /system/lib/libc.so (abort+4) 
I/DEBUG   ( 3309):     #02  pc 000121bd  /system/lib/libc.so 
I/DEBUG   ( 3309):     #03  pc 00010e75  /system/lib/libc.so (dlfree+1184) 
I/DEBUG   ( 3309):     #04  pc 0000d9c3  /system/lib/libc.so (free+10) 
I/DEBUG   ( 3309):     #05  pc 0015188c  <unknown> 
I/DEBUG   ( 3309):     #06  pc 00153138  <unknown> 
I/DEBUG   ( 3309):     #07  pc 00027e1c  <unknown> 
I/DEBUG   ( 3309):     #08  pc 0018c634  <unknown> 
I/DEBUG   ( 3309):     #09  pc 0000dd80  /data/app-lib/com.jellk.cityrun3d2-1/libmono.so (mono_jit_init_version+40) 
I/DEBUG   ( 3309):     #10  pc 002c0334  <unknown> 
I/DEBUG   ( 3309):     #11  pc 003b15a8  <unknown> 
I/DEBUG   ( 3309):     #12  pc 003b1a2c  <unknown> 
I/DEBUG   ( 3309):     #13  pc 0001dc0c  /system/lib/libdvm.so (dvmPlatformInvoke+112) 
I/DEBUG   ( 3309):     #14  pc 0004de6f  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398) 
I/DEBUG   ( 3309):     #15  pc 00027020  /system/lib/libdvm.so 
I/DEBUG   ( 3309):     #16  pc 0002b5d0  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184) 
I/DEBUG   ( 3309):     #17  pc 0005fe91  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292) 
I/DEBUG   ( 3309):     #18  pc 0005febb  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20) 
I/DEBUG   ( 3309):     #19  pc 00054c4f  /system/lib/libdvm.so 
I/DEBUG   ( 3309):     #20  pc 0000ca58  /system/lib/libc.so (__thread_entry+72) 
I/DEBUG   ( 3309):     #21  pc 0000cbd4  /system/lib/libc.so (pthread_create+208) 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): stack: 
I/DEBUG   ( 3309):          75969540  77df28b0   
I/DEBUG   ( 3309):          75969544  00000000   
I/DEBUG   ( 3309):          75969548  400b4170  /system/lib/libc.so 
I/DEBUG   ( 3309):          7596954c  71c5e8e0   
I/DEBUG   ( 3309):          75969550  00000015   
I/DEBUG   ( 3309):          75969554  4008bd61  /system/lib/libc.so (__sflush+52) 
I/DEBUG   ( 3309):          75969558  400b4264  /system/lib/libc.so 
I/DEBUG   ( 3309):          7596955c  400b41c4  /system/lib/libc.so 
I/DEBUG   ( 3309):          75969560  00000000   
I/DEBUG   ( 3309):          75969564  4008cd7b  /system/lib/libc.so (_fwalk+34) 
I/DEBUG   ( 3309):          75969568  4008c029  /system/lib/libc.so (_cleanup) 
I/DEBUG   ( 3309):          7596956c  75969584  [stack:7130] 
I/DEBUG   ( 3309):          75969570  40058000   
I/DEBUG   ( 3309):          75969574  736ab1b0   
I/DEBUG   ( 3309):          75969578  df002777   
I/DEBUG   ( 3309):          7596957c  e3a070ad   
I/DEBUG   ( 3309):     #00  75969580  400b7204   
I/DEBUG   ( 3309):          75969584  fffffbdf   
I/DEBUG   ( 3309):          75969588  720aa000   
I/DEBUG   ( 3309):          7596958c  0000005a   
I/DEBUG   ( 3309):          75969590  ffffffff   
I/DEBUG   ( 3309):          75969594  00000000   
I/DEBUG   ( 3309):          75969598  00000003   
I/DEBUG   ( 3309):          7596959c  759695c4  [stack:7130] 
I/DEBUG   ( 3309):          759695a0  400b6ff4   
I/DEBUG   ( 3309):          759695a4  400884d0  /system/lib/libc.so (__pthread_clone) 
I/DEBUG   ( 3309):     #01  759695a8  00000000   
I/DEBUG   ( 3309):          759695ac  4007e1c1  /system/lib/libc.so 
I/DEBUG   ( 3309):     #02  759695b0  759699d4  [stack:7130] 
I/DEBUG   ( 3309):          759695b4  00000055   
I/DEBUG   ( 3309):          759695b8  759695c4  [stack:7130] 
I/DEBUG   ( 3309):          759695bc  75969619  [stack:7130] 
I/DEBUG   ( 3309):          759695c0  759699c3  [stack:7130] 
I/DEBUG   ( 3309):          759695c4  20404040   
I/DEBUG   ( 3309):          759695c8  524f4241  /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG   ( 3309):          759695cc  474e4954  /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG   ( 3309):          759695d0  6e69203a  /system/framework/core.odex 
I/DEBUG   ( 3309):          759695d4  696c6176  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695d8  64612064  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695dc  73657264  [stack:7097] 
I/DEBUG   ( 3309):          759695e0  726f2073  /system/lib/libwebcore.so 
I/DEBUG   ( 3309):          759695e4  64646120  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695e8  73736572  /dev/mali0 
I/DEBUG   ( 3309):          759695ec  20666f20   
I/DEBUG   ( 3309):          ........  ........ 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): memory near r1: 
I/DEBUG   ( 3309):     71c5e8c0 00000004 71c61bf0 40b51888 71c61e70   
I/DEBUG   ( 3309):     71c5e8d0 00000003 00000007 00000004 0000100b   
I/DEBUG   ( 3309):     71c5e8e0 6d206e49 69616d67 4e4a206e 6e4f5f49   
I/DEBUG   ( 3309):     71c5e8f0 64616f4c 0000000a 2d202020 78616d20   

遇到此问题,我极端纠结,刚开始这么想“既然是libc里面的函数出了问题,那我有什么办法呢?”

最后在网上查看了一下相关问题,看了别人的解决思路,相关链接如下:

http://stackoverflow.com/questions/12246312/fatal-signal-11-and-invalid-heap-address-in-dlfree-error-when-using-glshaderbina

http://stackoverflow.com/questions/19463705/aborting-invalid-heap-address-in-dlfree-addr-0x00000156

看了这些,我可以肯定的是“自己前面的想法是错的,不是libc的问题,是自己的code有问题”,于是就返回去看自己的code(其实是开源项目,很多代码)。

经我调试和一步步排查发现,是自己把strcpy使用错误导致的,这是个很低级的错误,我没有给buf分派足够的空间,直接使用了strcpy(buf, src)。把这个问题改过来之后,此错误就pass了。


最后要说明的是,如果出现上述问题:

第一,肯定是自己code出错。

第二,必须告诉自己,是自己的code出错,不要找借口。

第三,重复第一和第二。

第四,出现这个问题,不一定是strcpy引起的,也许是使用其他函数引起。

第五,strcpy使用错误,有可能引起前面的错误。

第六,欢迎大家拍砖,分享,交流。






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数的错误应用导致的致命错误(一)——strcpy 的相关文章

  • R语言学习笔记:分析学生的考试成绩

    孩子上初中时拿到过全年级一次考试所有科目的考试成绩表 正好可以用于R语言的统计分析学习 为了不泄漏孩子的姓名 就用学号代替了 感兴趣可以下载测试数据进行练习 num class chn math eng phy chem politics
  • IUnknown—COM和MFC

    转自 http hi baidu com zhangqiuxi blog item 6d9603ad9c8fe5084b36d6a0 html 问题 我用MFC编写COM程序有一段时间了 知道如何使用宏和嵌套类 以及如何在嵌套类中处理IUn
  • 调用拷贝构造函数的几种情况(附面试题)

    1 深拷贝和浅拷贝 拷贝构造函数的使用 有时候需要自己定义拷贝构造函数 以避免浅拷贝问题 在什么情况下需要用户自己定义拷贝构造函数 一般情况下 当类中成员有指针变量 类中有动态内存分配时常常需要用户自己定义拷贝构造函数 在什么情况下系统会调
  • 《我的世界》Python编程入门(9) 使用函数建造房子

    一 函数的基本概念 1 1 函数在数学中的概念 函数指一个量随着另一个量的变化而变化 函数的数学形式 y f x f是一种定义好的关系 可以简称为函数 在函数f中 只要x值的确定 那么y的值一定是确定的 y的值随x值的变化而变化 1 2 P
  • std::nth_element bug引起的crash问题

    1 源码 auto less compare const MirroringGroup mg1 const MirroringGroup mg2 gt bool return mg1 usage lt mg2 usage std nth e
  • C++工程师复习题

    一 auto ptr 类使用必须满足下列限制 1 不要使用 auto ptr 对象保存指向静态分配对象的指针 2 不要使用两个 auto ptrs 对象指向同一对象 3 不要使用 auto ptr 对象保存指向动态分配数组的指针 4 不要将
  • c/c++入门教程 - 1.基础c/c++ - 1.0 Visual Studio 2019安装环境搭建

    推荐视频课程 https www bilibili com video BV1et411b73Z p 2 已投币三连 b站果然是个学习的网站 本来是想在linux环境下运行QT 于是先学了几个月linux嵌入式驱动开发 后来发现太底层了 与
  • c++得到窗口句柄

    include
  • 使用QZXing生成并解析二维码

    QZxing 是对 zxing 的一个封装 用于在 Qt 程序中加入条形码和二维码识别的功能 这里就讲讲如何编译和使用这个库 前几年 QZXing 的代码是放到 sourceforge net 上的 现在迁移到了 github com 所以
  • Lua和C++交互总结(很详细)

    出处 http blog csdn net shun fzll article details 39120965 一 lua堆栈 要理解lua和c 交互 首先要理解lua堆栈 简单来说 Lua和C c 语言通信的主要方法是一个无处不在的虚拟
  • dev-c++官网位置和源码/库位置

    1 http devpaks org 2 http www bloodshed net 3 http www bloodshed net dev 转载于 https www cnblogs com vilyLei articles 1812
  • js制作简易计算器

    实现2个输入框中输入整数后 点击第三个输入框能给出2个整数的加减乘除 提示 获取元素的值设置和获取方法为 例 赋值 document getElementById id value 1 取值 var document getElementB
  • lua和测试(一)

    lua做为一门高级语言 在游戏产业运用到机会越来越多了 测试掌握几门脚本语言也有一定的重要性 以下对于lua组合输入做出一些引导 测试需要掌握的关于返回数值 主要用到布尔类 前言的指引 lua的语法比较简单和清晰 学过c语言的可以很好的掌握
  • C++学习笔记12:输入输出流实例整理(文本文件读写,二进制文件读写,一组数据的文件读写,随机访问文件实例

    这也太难记了555老阔疼 文件读写示例 include
  • Public Private Protect Inheritance and access specifiers

    In the previous lessons on inheritance we ve been making all of our data members public in order to simplify the example
  • 【C/C++】 - Linux下查找函数头文件 以及 man命令拓展

    背景 比如现在需要找C语言 sleep函数的头文件 使用man来查找 可以先man sleep 可以发现出来的默认是sleep 1 是一个User Commands 明显不是我们需要的 这里提示了 看sleep 3 那我们查看下sleep
  • 检查内存泄露

    自己编写的视频处理程序出现了一个问题 每帧的运行时间随着运行时间在不断增长 很大可能是出现了内存泄露 于是学习了一些查看内存泄露的方法 做了两种尝试 一是VS自带的DEBUG下的检测 view pl html view plain copy
  • 虚函数不能声明为static

    虚函数申明为static报错 class Foo public Foo default static virtual Foo int main Foo foo return 0 main cpp 10 25 error member Foo
  • C++常见STL容器基本用法

    1 vector include
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮

随机推荐

  • SecureCRT向Linux系统传送和接收文件

    SecureCRT向Linux系统传送和接收文件 SecureCRT支持Xmodem Ymodem和Zmodem协议 只需要简单的一个小工具配合命令就可以实现很方便的文件传输 以前上课见老师用过 今天自己搭了个linux服务器做驱动开发 要
  • flutter开启http服务,可用于投屏,或者对外提供接口

    var httpServer await HttpServer bind InternetAddress anyIPv4 8081 shared true httpServer listen HttpRequest request asyn
  • BUCT OJ 1711: 错位排序

    题目描述 给定整数 n 1 lt n 6 编写程序以字典序列出n的所有错位排列序列 所谓字典序即升序 所谓错位排列指在数j不能在数列中第j个位置 输入 输入包括多行 每行一个整数n 输出 每行输出一种排列 每行数字以空格相隔 以回车换行 样
  • Matlab plotyy画2个纵坐标不同的图

    目录 plotyy函数可以绘制双纵坐标的二维图 具体用法总结如下 1 如何设置双坐标 2 如何设置线型 3 加注图例 plotyy函数可以绘制双纵坐标的二维图 具体用法总结如下 1 plotyy X1 Y1 X2 Y2 以左 右不同纵轴绘制
  • 创建repo报错

    doesn t match any of the locations specified by path repo because this setting is empty 这个错误的原因所有的master和data都要配置一个path
  • 十分钟学会开发自己的Python AI应用【OpenAI API篇】

    最近 OpenAI 宣布 ChatGPT 将很快推出他们的 API 虽然我们不知道这需要多长时间 但这之前我们可以熟悉下OpenAI API 快速开发自己的AI应用 通过今天学习 OpenAI API 你将能够访问 OpenAI 的强大模型
  • python在获取网络状态时连接尝试失败应该怎么办

    如果 Python 在获取网络状态时连接尝试失败 可以采取以下措施 对检查网络连接状态 检查是否有其他设备或程序正在使用网络 确保网络连接正常 检查目标网站是否存在 如果目标网站不存在或正在维护 连接将失败 使用代理服务器 如果您的网络有限
  • 数据分析毕业设计 大数据商城人流数据分析与可视化 - python

    文章目录 0 前言 课题背景 分析方法与过程 初步分析 总体流程 1 数据探索分析 2 数据预处理 3 构建模型 总结 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两
  • npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\npm_packages\_cacach

    问题描述 npm ERR code EPERM npm ERR syscall open npm ERR path D Program Files nodejs npm packages cacach 问题截图 问题原因 因为nodojs的
  • Kaldi 编译问题

    今天编译Kaldi 总是冒出 Could not find any libraries usr local lib liblapack liblapack atlas libclapack that seem to be an ATLAS
  • MySQL编码设置方法 MySQL编码为utf8设置方法

    mysql的默认编码是拉丁 我每次JSP制作网页用insert语句插入数据库时汉字都会显示成问号 安装mysql后 启动服务并登陆 使用show variables命令可查看mysql数据库的默认编码 由上图可见database和serve
  • 前端学习————css实现简单登录页面

    css实现简单登录页面 一 页面展示 二 思路 1 设置背景图片 2 设置登录框框并使其处于靠右位置 3 设置登录框框内容 三 代码展示 1 HTML 2 css 一 页面展示 二 思路 1 设置背景图片 2 设置登录框框并使其处于靠右位置
  • matlab cftool光滑曲线导出为什么就不光滑了_MATLAB

    0 前言 数据可视化 data visualization 技术指的是运用计算机图形学和图像处理技术 将数据转换为图形或图像在屏幕上显示出来 并进行交互处理的技术 它涉及计算机图形学 图像处理 计算机辅助设计 计算机视觉及人机交互技术等多个
  • 常用电磁屏蔽材料介绍及技术指标

    其实在电子设备工作时 其内部及外部会存在各种电磁干扰 这些干扰会影响到设备的正常工作 通常 电子设备工作时对外界的干扰强度及其自身抗外界干扰的能力 我们将其称之为电磁兼容 电磁兼容 Electromagnetic Compatibility
  • arduino字符串处理函数charAt()提取字符

    语法 String charAt n 参数 n 字符串中的第几个字 返回值 char 功能 获取字符串中的某一个字符 字符的位置即n的位置 String str hello 定义一个字符对象 Char s str charAt 3 取对象里
  • 单链表插入与删除数据

    1 按元素大小顺序插入到链表中 2 include
  • 在eclipse中调试时,怎样查看一个变量的值?

    在要查看的变量前先设置断点 然后选中变量 右键选debug as gt Java Application 打开debug 透视图 这时在Variables 窗口中可以看到变量当前的值 如果是局部变量 也可以在局部变量窗口中查看 要知道一个方
  • 【区块链新手快速入门】如何构建一个区块链

    本文翻译自 Learn Blockchains by Building One 作者 dvf 原文链接 https hackernoon com learn blockchains by building one 117428612f46
  • go单元测试进阶篇

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 版权声明 本文由腾讯云数据库团队 原创文章 转载请注明出处 文章原文链接 https www qcloud com community article 9219850014
  • 函数的错误应用导致的致命错误(一)——strcpy

    对一个coder来说 记录一些自己所遇到的错误及解决方法是很重要的 写此系列博文 以备后用 也希望对大家有所帮助 下面是我在调试一个程序是碰到的错误 错误log F libc 7081 ABORTING invalid address or