野指针与内存操作

1.野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的

2.野指针不是NULL指针,是指向不可用内存的指针

3.NULL指针不容易用错,因为if语句很好判断一个指针是不是NULL,C语言中没有任何手段可以判定一个指针是否为野指针

4.(1)局部变量没有被初始化(2)使用已经释放后的指针(3)指针所指向的变量在指针之前被销毁.

5.结构体成员指针未初始化

6.没有为结构体指针分配足够的内存

7.内存分配成功,但并未初始化

8.数组越界

9.内存泄漏,最好单入单出

10.多次指针释放,后果:(异常退出)

11.使用已释放的指针

12.用malloc申请了内存之后,应该立即检查指针值是否为NULL,防止使用值为NULL的指针.

12.牢记数组的长度,防止数组越界操作,考虑使用柔性数组.

13.动态申请操作必须和释放操作匹配,防止内存泄漏和多次释放.

free指针之后必须立即赋值为NULL

时间: 2024-10-19 14:50:23

野指针与内存操作的相关文章

C语言-第32课 - 野指针和内存操作分析

第32课 - 野指针和内存操作分析 一.概念 初识野指针 l 野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的. l 野指针不是NULL指针,是指向不可用内存的指针. l NULL指针不容易用错,因为if语句很好判断一个指针是不是NULL. l C语言中没有任何手段可以判断一个指针是否为野指针. 野指针的由来 (1)局部指针变量没有被初始化. 例: #include <stdio.h> #include <string.h> struct Student { cha

c/c++:内存泄露和野指针的概念

内存泄漏 用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元.直到程序结束.即所谓内存泄漏.    注意:内存泄漏是指堆内存的泄漏. 简单的说就是申请了一块内存空间,使用完毕后没有释放掉.它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃.由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了. 野指针 "野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用

C++三种野指针及应对/内存泄露

野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是野指针是很危险的,也具有很强的掩蔽性,if语句对它不起作用. 造成野指针的常见原因有三种: 1.指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针.在Debug模式下,VC++编译器会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当

关于空指针NULL、野指针、通用指针

http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了.假设 有语句 int a=10;那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000:那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.现在定义:int *p:                 p=&a

野指针相关总结

小程序如下: 1 void Test(void) 2 { 3 char *str = (char *) malloc(100); 4 strcpy(str, "hello"); 5 free(str); 6 if(str != NULL) 7 { 8 strcpy(str, "world"); 9 printf(str); 10 } 11 } 请问运行Test函数会有什么样的结果?答:篡改动态内存区的内容,后果难以预料,非常危险.因为free(str);之后,str

七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 [email&#160;protected]参数 [email&#160;protected]和循环retain的使用 6.NSString的内存管理

1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程序闪退. 2.OC内存管理的范围 : 管理任何继承NSObject的对象,对其他的基本数据类型无效. 3.对象类型是程序运行过程中动态分配的,存储在堆区:内存管理主要是对 堆区中的对象的内存管理. 4.OC内存管理的原理 为了防止内存泄露 对象的引用计数器 : 每个OC对象都有自己的引用计数器,是一

Objective-C 【多个对象内存管理(野指针&amp;内存泄漏)】

------------------------------------------- 多个对象内存管理(野指针&内存泄漏) (注:这一部分知识请结合"单个对象内存管理"去理解) 这一部分的知识比较简单,就牵扯到一个会产生野指针的情形和如何避免内存泄漏问题. 代码: #import <Foundation/Foundation.h> @interface Car : NSObject -(void)run; @end @implementation Car //监控

空指针——野指针——内存泄漏

转自https://blog.csdn.net/jackshiny/article/details/43838919 空指针: 一般声明一个指针变量赋值为NULL,这就是空指针,各个类型的空指针都存在确确实实的内存地址,但是不会指向任何有效的值的内存地址,对空指针操作,例如访问属性和方法,会抛出空指针异常,因为空指针指向的内存地址没有对应的物理地址. 野指针: 指那些释放内存,但是指针赋值为空,这时候的指针指向任意地址,好可怕,例如指向内核地址或不属于本程序的内存地址,程序会被kill,即奔溃.

iOS开发_内存泄漏、内存溢出和野指针之间的区别

今天,在大连有一个面试,被问到了内存泄漏和野指针指向的区别,自己答的不是很好,特意回来查了资料,在博文中总结一下经验,欢迎指正. 内存泄漏:是指在堆区,alloc 或new 创建了一个对象,但是并没有放到自动释放池中,或者没有free 对象,导致这块内存一直被占用,换一种方法说,就是没有指针指向这块内存,再通俗点,开辟了一段空间,在没有被释放之前,结果找不到这块内存了,这样就会造成内存泄漏的问题.这块内存会直至程序运行结束才会被释放. 野指针:是指针指向已经delete 的对象,或者是未申请访问