僵尸对象


//野指针。就是没有指向具体地址的指针

/*

已经被销毁的对象(不能再使用的对象)

野指针

指向僵尸对象(不可用内存)的指针

给野指针发消息会报EXC_BAD_ACCESS/EXC_BREAKPOINT错误(message sent to deallocated instance 0x100100350)

空指针

没有指向存储空间的指针(里面存的是nil,
也就是0)

给空指针发消息是没有任何反应的,不会提示出错!

为了避免野指针错误的常见办法

1.在对象被销毁之后,
将指向对象的指针变为空指针(p=nil)

2.在初始化变量时初值为null

*/

#import <Foundation/Foundation.h>

int main(int argc,
const
char * argv[]) {

@autoreleasepool {

//第一种野指针情况

int * p = 
malloc(40);

p[0] =
123;

for (int
i = 0; i<1000; i++) {

int * temp =
calloc(4,
10);

free(temp);

}

//第二种情况:在main()函数中如果为main(void)
的话,定义变量不初始化变量里就是垃圾数。如果定义一个指针,那么,这个指针指向哪里也是不知道的,也是野指针。

NSLog(@"%d",p[0]);

}

return
0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-05 23:23:24

僵尸对象的相关文章

僵尸对象与野指针以及空指针

僵尸对象:占用空间被释放的对象 野指针:指向僵尸对象的指针(给野指针发消息会报错) 空指针:指向nil的指针(给空指针发消息会不报错) 因为给野指针发消息会报错,因此我们要监听僵尸对象,这样就可以在控制台输出错误原因 设置如下图

iOS 关于僵尸对象和僵尸指针的那些事儿

引言 提到僵尸就感到一种恐怖,大家都知道“僵尸”是没有生命的,但是它确实是一种存在的类似生命体的一种生物.哈哈,当然本文的重点不是讨论“僵尸”,而是有关于ios当中经常遇到的僵尸指针(Zombie Pointer)和僵尸对象(Zombie Object). 野指针 先来介绍一下野指针,C/C++中对野指针的定义为:野指针就是指向垃圾内存的指针,这个指针地址不是NULL.如果给一个指针赋值为NULL,那么该指针就是一个空指针,可以用if语句判读.但是对于野指针不能用if语句判断. 野指针产生的原因

IOS性能调优系列:使用Zombies动态分析内存中的僵尸对象

硬广:<IOS性能调优系列>第四篇,预计会有二十多篇,持续更新,欢迎关注. 前两篇<IOS性能调优系列:Analyze静态分析>.<IOS性能调优系列:使用Instruments动态分析内存泄漏>关注了内存泄露的问题,本篇正好相反,关注的是内存中那些被过度释放的对象(overreleased objects). 这篇的标题纠结了半天,到底是写EXC_BAD_ACCESS错误调试,还是写内存中僵尸对象的分析,最后还是选了个Duang~Duang~的标题. 今天在论坛上看到

用&quot;僵尸对象&quot;调试内存管理问题

Cocoa提供了"僵尸对象"(Zombie Object)这个功能.启用这项调试功能之后,运行时系统会把所有已经回收的实例转化成特殊的"僵尸对象",而不会真正回收它们.这种对象所在的核心内存无法重用,因此不可能遭到覆写.僵尸对象收到消息后,会抛出异常,其中准确说明了发送过来的消息,并描述了回收之前的那个对象.僵尸对象是调试内存管理问题的最佳方式. 开启僵尸模式的方法:Xcode->Product->Scheme->Edit Scheme->R

ios 概念: 僵尸对象 空指针 与 野指针

内存管理    2014年5月21日 僵尸对象:指向已经删除的对象内存空间

iOS 8:僵尸对象与MRC调试

关键字:MRC  手动引用计数  僵尸对象  NSZombieEnabled 周日在某群遇到一份求助代码,大致情况是UITableViewController初始化正常,向下划去时应用崩溃.问题定位到覆盖的initWithStyle中,对方的代码有一处赋值语句:_name = name.这句话直接使用了后台存储变量,所以没走setter方法.我看对方是MRC代码,开了NSZombieEnabled才确认问题,惭愧.附上关键代码,作个记录. .h文件 @property (nonatomic, c

iOS中僵尸对象的实现方法

什么是僵尸对象?所谓僵尸,就是过度释放的对象.在ios开发中,僵尸对象对于开发人员调试程序来说很有用.我们通常将NSZombieEnabled环境变量设置为YES来打开僵尸对象,但这会导致所有的对象都不会被释放,程序长时间运行会占用大量内存. 那有么有什么其他方法来实现僵尸对象呢?下面小编就给大家介绍下,模仿XCode用代码实现僵尸对象的方法. 创建僵尸对象 在ios开发中,当一个普通对象的retainCount变成0的时候,会调用dealloc,代码要勾住dealloc后,就可进行一下操作:

iOS中的僵尸对象的实现

僵尸对象对于我们调试程序来说很有用,在XCode中打开僵尸对象的方法是设置NSZombieEnabled环境变量为YES,这导致所有的对象都不会被释放,程序跑起来会时间长了内存占用量很大,这次我们就要来写一些代码,模仿XCode中的实现,这样我们也能够大体上了解了XCode中实现僵尸对象的原理了. Mike Ash在他的博客中已经解释了僵尸对象实现的细节,我在这里就算是翻译一下吧...  (这些链接可能需要翻墙...) OC中的对象都是结构体,结构体中第一个字段是一个isa,指向对象的类对象,类

IOS里面查找和解决僵尸对象

内存泄漏是当一个对象或变量在使用完成后没有释放掉,那么如果我们走了另外一个极端情况会什么样呢?这就导致过度释放(over release)问题,从而使对象“僵尸化”,对象称为僵尸(zombies)对象.一个对象已经被释放过了,或者调用者没有这个对象的所有权而释放它, 都会造成过度释放,产生僵尸对象.试图调用僵尸对象方法应用会崩溃(应用直接跳出),并抛出异常EXEC_BAD_ACCESS,那么EXEC_BAD_ACCESS给予的提示通常是毫无debug价值的信息. 简单一句话描述: 僵尸对象:已经