企业从物联网中获得了投资回报
|
(关于内存的动态分配,这是个比较复杂的话题,有机会再专门开辟一章给各位讲述一下吧,写个帖子还是很花费时间和精力的,呵呵,写过的童鞋应该都很清楚,所以顺便插一句,转帖可以,请注明出处,毕竟,大家都是本着共享的精神来讨论问题的,写的好坏都没有向你所要什么,请尊重每个人的劳动成果。)指向空,或者说不指向任何东西。 十五 坏指针 指针变量的值是NULL,或者未知的地址值,或者是当前应用程序不可访问的地址值,这样的指针就是坏指针。 不能对他们做解指针操作,否则程序会出现运行时错误,导致程序意外终止。 任何一个指针变量在做解地址操作前,都必须保证它指向的是有效的,可用的内存块,否则就会出错。
坏指针是造成C语言Bug的最频繁的原因之一 因为,第一次free操作之后,p指向的内存已经释放了,但是p的值还没有变化,free函数改不了这个值,再free一次的时候,p指向的内存区域已经被释放了,这个地址已经变成了非法地址,这个操作将导致段错误的发生(此时,p指向的区域刚好又被分配出去了,但是这种概率非常低,而且对这样一块内存区域进行操作是非常危险的!)
但是下面这段代码就不会出现这样的问题: 然,就机器内部而言,NULL指针的实际值可能与此不同,这种情况下,编译器将负责零值和内部值之间的翻译转换。 NULL指针的概念非常有用,它给了你一种方法,表示某个特定的指针目前并未指向任何东西。例如,一个用于在某个数组中查找某个特定值的函数可能返回一个指向查找到的数组元素的指针。如果没找到,则返回一个NULL指针。
在内存的动态分配上,NULL的意义非同凡响,我们使用它来避免内存被多次释放,造成经常性的段错误(segmentation fault)。一般,在free或者delete掉动态分配的内存后,都应该立即把指针置空,避免出现所以的悬挂指针,致使出现各种内存错误!例如: 十四 空指针(NULL指针) NULL是C语言标准定义的一个值,这个值其实就是0,只不过为了使得看起来更加具有意义,才定义了这样的一个宏,中文的意思是空,表明不指向任何东西。你懂得。不过在此不讨论空和零的区别。 在C语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是((void*)0),就像前面说的指针可以理解成特殊的int,它总是有值的,p=NULL,其实就是p的值等于0。对于不多数机器而言,0地址是不能直接访问的,设置为0,就表示该指针哪里都没指向。而在C++中,NULL实质是0。 换种说法:任何程序数据都不会存储在地址为0的内存块中,它是被操作系统预留的内存块。
下面代码摘自 stdlib.h (编辑:唐山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
