春节小练习——什么是野指针

xiaoxiao2021-02-28  52

什么是野指针 “野指针”不是NULL指针,而是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。“野指针”的成因主要有两种: 1、指针变量没有被初始化。 任何指针变量刚被创建时不会自动成为NULL指针,它的默认值时随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针身为NULL,要么让它指向合法的内存。 2、指针p被free或delete之后,没有置为NULL。 这样会让人误以为p是个合法的指针,因而会出现意想不到的错误(乱指一气);

野指针的危害 下面的程序片段有什么bug? 1 short *bufptr; 2 short bufarray[20]; 3 short var = 0x20; 4 *bufptr = var; 5 bufarray[0] = var; 解析: 代码第四行,错误。将bufptr指针指向的内容赋为var变量的值。因为bufptr没有被初始化,是个“野指针”,因此对它所指向的内容操作是十分危险的,会导致程序崩溃。为了杜绝这种错误,可以将bufptr正确的进行初始化。代码第一行改为: short bufptr = (short )malloc(sizeof(short));

有了malloc/free,为什么还要new/delete 要点:malloc/free和new/delete的区别 malloc与free是C++/C的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用malloc和free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数的析构函数的任务强加于malloc/free。 因此,C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意:new/delete不是库函数。

转载请注明原文地址: https://www.6miu.com/read-2613005.html

最新回复(0)