首页 数据库 mysql教程 iOS内存错误EXC_BAD_ACCESS的解决方法

iOS内存错误EXC_BAD_ACCESS的解决方法

Jun 07, 2016 pm 03:36 PM
access ios 内存 方法 解决 错误

iOS开发,最郁闷的莫过于程序毫无征兆地就崩溃了,用bt命令打出调用栈,给出的是一堆系统EXC_BAD_ACCESS的信息,根本没办法定位问题出现在哪里。 首先说一下 EXC_BAD_ACCESS 这个 错误 ,可以这么说,90%的 错误 来源在于对一个已经释放的对象进行release操

iOS开发,最郁闷的莫过于程序毫无征兆地就崩溃了,用bt命令打出调用栈,给出的是一堆系统EXC_BAD_ACCESS的信息,根本没办法定位问题出现在哪里。 首先说一下 EXC_BAD_ACCESS 这个错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作。举一个简单的例子来说明吧,首先看一段Java代码:

复制代码 代码如下:


public class Test{
public static void main(String[] args){
String s = "This is a test string";
s = s.substring(s.indexOf("a"),(s.length()));
System.out.println(s);

}
}



通常这样的崩溃出现,原因一般就是:调用了已经释放的内存空间,或者说重复释放了某个地址空间。而怎样定位到这个地址呢,可以通过编辑xcode的scheme,添加如下标记位,让系统把错误地址打印出来,如图:

(通过Product->Scheme->Edit Scheme进入下面编辑页面,选中Arguments tab,增加标计位NSZombieEnabled设为YES)

这样,但崩溃出现,系统会出现以下提示信息:

2013-06-23 00:45:20.479 *** -[__NSArrayM addObject:]: message sent to deallocated instance 0x7179910

可见崩溃原因是内存地址0x7179910被重复释放了。

Objective-C 这段代码有三个致命问题:1、内存泄露;2、错误释放;3、造成 EXC_BAD_ACCESS 错误

如果崩溃是发生在当前调用栈,通过上面的做法,系统就会把崩溃原因定位到具体代码中。但是,如果崩溃不在当前调用栈,系统就仅仅只能把崩溃地址告诉我们,而没办法定位到具体代码,这样我们也没法去修改错误。这时就可以修改scheme,让xcode记录每个地址alloc的历史,这样我们就可以用命令把这个地址还原出来。如图:(跟设置NSZombieEnabled一样,添加MallocStackLoggingNoCompact,并且设置为YES)

这样,当出现崩溃原因是message sent to deallocated instance 0x7179910,我们可以使用以下命令,把内存地址还原:

info malloc-history 0x7179910

如图,这个命令能具体把这个地址在哪一行代码生成还原出来。

(需要注意的是,因为这个命令只支持gdb,所以必须把控制台的输出改成gdb,并且有点遗憾的是,只支持模拟器,不支持真机调试)

(同样是通过Product->Scheme->Edit Scheme进入上面编辑页面,选中Info tab)

这样,好好检查一下那一行的代码,应该就很容易找出问题所在了。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
sql if语句怎么用 sql if语句怎么用 Apr 09, 2025 pm 06:12 PM

SQL IF 语句用于有条件地执行 SQL 语句,语法为: IF (condition) THEN {语句} ELSE {语句} END IF;。条件可以是任何有效的 SQL 表达式,如果条件为真,执行 THEN 子句;如果条件为假,执行 ELSE 子句。IF 语句可以嵌套,允许更复杂的条件检查。

如何解决Vue Axios跨域导致的&quot;Network Error&quot; 如何解决Vue Axios跨域导致的&quot;Network Error&quot; Apr 07, 2025 pm 10:27 PM

解决 Vue Axios 跨域问题的方法包括:服务器端配置 CORS 头使用 Axios 代理使用 JSONP使用 WebSocket使用 CORS 插件

apache怎么配置zend apache怎么配置zend Apr 13, 2025 pm 12:57 PM

如何在 Apache 中配置 Zend?在 Apache Web 服务器中配置 Zend Framework 的步骤如下:安装 Zend Framework 并解压到 Web 服务器目录中。创建 .htaccess 文件。创建 Zend 应用程序目录并添加 index.php 文件。配置 Zend 应用程序(application.ini)。重新启动 Apache Web 服务器。

c#多线程的好处有哪些 c#多线程的好处有哪些 Apr 03, 2025 pm 02:51 PM

多线程的好处在于能提升性能和资源利用率,尤其适用于处理大量数据或执行耗时操作。它允许同时执行多个任务,提高效率。然而,线程过多会导致性能下降,因此需要根据 CPU 核心数和任务特性谨慎选择线程数。另外,多线程编程涉及死锁和竞态条件等挑战,需要使用同步机制解决,需要具备扎实的并发编程知识,权衡利弊并谨慎使用。

无法以 root 身份登录 mysql 无法以 root 身份登录 mysql Apr 08, 2025 pm 04:54 PM

无法以 root 身份登录 MySQL 的原因主要在于权限问题、配置文件错误、密码不符、socket 文件问题或防火墙拦截。解决方法包括:检查配置文件中 bind-address 参数是否正确配置。查看 root 用户权限是否被修改或删除,并进行重置。验证密码是否准确无误,包括大小写和特殊字符。检查 socket 文件权限设置和路径。检查防火墙是否阻止了 MySQL 服务器的连接。

如何在Debian上监控Nginx SSL性能 如何在Debian上监控Nginx SSL性能 Apr 12, 2025 pm 10:18 PM

本文介绍如何在Debian系统上有效监控Nginx服务器的SSL性能。我们将使用NginxExporter将Nginx状态数据导出到Prometheus,再通过Grafana进行可视化展示。第一步:配置Nginx首先,我们需要在Nginx配置文件中启用stub_status模块来获取Nginx的状态信息。在你的Nginx配置文件(通常位于/etc/nginx/nginx.conf或其包含文件中)中添加以下代码段:location/nginx_status{stub_status

phpmyadmin漏洞汇总 phpmyadmin漏洞汇总 Apr 10, 2025 pm 10:24 PM

PHPMyAdmin安全防御策略的关键在于:1. 使用最新版PHPMyAdmin及定期更新PHP和MySQL;2. 严格控制访问权限,使用.htaccess或Web服务器访问控制;3. 启用强密码和双因素认证;4. 定期备份数据库;5. 仔细检查配置文件,避免暴露敏感信息;6. 使用Web应用防火墙(WAF);7. 进行安全审计。 这些措施能够有效降低PHPMyAdmin因配置不当、版本过旧或环境安全隐患导致的安全风险,保障数据库安全。

使用DICR/YII2-Google将Google API集成在YII2中 使用DICR/YII2-Google将Google API集成在YII2中 Apr 18, 2025 am 11:54 AM

vProcesserazrabotkiveb被固定,мнелостольностьстьс粹馏标д都LeavallySumballanceFriablanceFaumDoptoMatification,Čtookazalovnetakprosto,kakaožidal.posenesko

See all articles