首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言中“野指针”、“悬空指针是什么

1、“野指针”(wild pointer) “野指针”(wild pointer):是没有被初始化过的指针,所以不确定指针具体指向。...在实际的C语言程序开发中,定义指针时,一般都要尽量避免“野指针”的出现,可通过赋初值方式解决: void *p = NULL; void *data = malloc(size); 2、“悬空指针”(dangling...例如以下示例代码: void *p = malloc(size); assert(p); free(p); // 现在 p 是“悬空指针C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生...这是因为在 free(p) 之后,p 指针仍然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突,那么之后使用 p 并不会引发错误。...所以在实际的C语言程序开发中,为了避免出现“悬空指针”引发不可预知的错误,在释放内存之后,常常会将指针 p 赋值为 NULL: void *p = malloc(size); assert(p); free

1.6K50

C语言指针使用总结

前言 说起C语言中令人头疼的特性,相信大多数人都首先会提指针指针非常强大,但也非常不容易驾驭。不知道有多少人因为指针想大声对C语言高歌一曲”爱恨就在一瞬间“。...指针之所以强大,是因为它自由,可以让程序员充分发挥创意,去使用机器的全部能力。 也正是因为自由,所以它放大了人不够严谨的弱点,让人特别容易犯错。...这个系列的文章试图对指针方面常犯的错误做个梳理总结,帮助大家驯服这个C语言的野马。 指针问题本质上可以分为两类,一类是读不属于自己的内存,一类是写不属于自己的内存。...至于为什么会读写不属于自己的内存,根据问题起因,大体可以分为以下两大类情况: 分类 错误情形 说明 内容错误 1.未初始化 2.空指针 3.指针失效 指针指针指向的数据错误 过程错误 1.指针偏移计算问题...2.指针访问边界问题 3.指针类型问题 4.结构体对齐问题 5.多引用访问 指针的访问过程发生错误,访问到不该访问的内容 后续的文章, 我将对上面列举的常见问题进行一一分析,看看有哪些好方法可以解决问题

98430
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言中“指针”和“指针变量”的区别是什么

    比较严格的说法是这样的: 系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5;,存放变量i的内存单元的编号(地址)&i被称为指针。...“指针变量”则是存放前述“地址值”的变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址”的变量(因为一个变量通常要占用连续的多个字节空间)。...比如在int i=5;后有一句int *p=&i;,就把i的指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针的变量。...有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针指针变量的简称”,如对int *p=&i;的解释是:声明一个int *型指针p,并用变量i的地址初始化;而严格说应该是声明一个...int *型指针变量p才对。

    60730

    c语言指针的基本使用

    函数指针 指针(pointer)是C语言中一个重点和难点,以下是对其基本使用的一些总结,适合入门的同学。除了是对自己的学习的总结之外,也希望能对大家有所帮助。 1....指针变量的定义和初始化 与C语言其他变量类似,指针也是一种变量,只不过它与其他变量不同,一般变量是直接包含了一个特定的值,而指针是包含了一个变量的值所在的地址,也就是说,指针存储了一个变量的地址,间接地指向一个值...0,NULL表示指针不指向任何东西(推荐使用NULL,因为使用0时还得进行类型转换)。后文讨论如何将变量的地址赋值给一个指针。 2....可以使用const修饰符对指针变量进行修饰,但放在不同位置中表示不同的含义。...指针数组 char *strings[2] = {"hello", "world"}; 首先,从定义中的[2]可看出这是一个数组,这个数组的每个元素是什么类型的呢?char *告诉了我们。

    90610

    【说站】c语言中的指针是什么

    c语言中的指针是什么 1、指针C语言的重要特征。它提供了引用数据结构(包括数组)元素的机制。 类似于变量,指针有两个方面:值和类型。...2、指针非常灵活,可以指向任何类型的数据。指针类型说明了指向地址空间的内存。 别忘了指针类型和变量名中间还有一个*号。没有这个*号,只定义了一个普通变量,这也是普通变量声明和指针声明的区别之一。...实例 int    *p;    /* 一个整型的指针 */ double *p;    /* 一个 double 型的指针 */ float  *p;    /* 一个浮点型的指针 */ char   ...*p;    /* 一个字符型的指针 */ 以上就是c语言中的指针的介绍,希望对大家有所帮助。...更多C语言学习指路:C语言教程 本教程操作环境:windows7系统、C11版,DELL G3电脑。

    57140

    C语言指针(野指针)

    2:如何规避野指针 1.1:指针变量的初始化 2.2:指针越界访问 3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL  4.4:指针使用之前检查有效性 1:什么是野指针?...程序通常使用指针来表示条件,例如未知长度列表的结尾或未执行某些操作; 这种空指针使用可以与可空类型和选项类型中的Nothing值进行比较。...空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针。...NULL printf("%d\n",pa); 4.4:指针使用之前检查有效性 当你指针变量不可以用的时候就把它设置成NULL,当你指针变量可以用的时候就不是NULL。...= NULL) { //进行使用 } if (pa == NULL) { //不进行使用 }  好了,这已经是第三篇了,希望我可以一直坚持下去,加油!

    2.6K20

    C - 指针C语言指针的总结

    C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制的数。...指针 指针C语言的灵魂。指针变量占据8个字节。 变量在内存中的存储。 变量的值:存储在变量中的数据,叫做变量的值。 变量的地址:组成这个变量的低字节的地址,就是这个变量的地址。...p操作的是p这个指针变量,可以取p得值,也可以为p赋值 指针变量的使用 可以使用指针间接的操作指针指向的变量。 *p 代表 p 指针指向的变量。...那么什么时候使用指针作为参数呢?...无论指针是什么类型在内存中都是占据8个字节。 那为什么指针还要分类呢?

    4.2K81

    C语言指针

    二、指针的定义 三、指针的初始化 四、指针运算符 五、指针的用途举例 六、关于指针的疑问 指针C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。...1.我们已经知道,"直接引用"是直接通过变量名来读写变量 2.C语言中还有一种"间接引用"的方式(以变量a为例):首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a...,第6行中的*p的意思是:根据p值(即变量a的地址)访问对应的存储空间,并取出存储的内容(即取出变量a的值),赋值给value 3.使用注意 在指针变量没有指向确定地址之前,不要对它所指的内容赋值。...* 看下面的代码,利用指针p读取变量c的值 1 int i = 2; 2 char c = 1; 3 4 // 定义一个指向char类型的指针 5 char *p = &c; 6 7 // 取出 8...这个要根据内存来分析 根据变量的定义顺序,这些变量在内存中大致如下图排布: 其中,指针变量p和int类型变量i各占2个字节,char类型的c占一个字节,p指向c,因此p值就是c的地址 ?

    3.3K60

    C语言——指针

    目录 指针是什么指针变量 使用指针变量的例子 通过指针引用数组 &数组名vs数组名 野指针指针成因 如何避免野指针 指针运算 指针是什么?...指针c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说...指针C语言的灵魂(doge) 由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,一个房间的门口挂了一个房间号2008,这个2008就是房间的地址,或者说,2008"指向"...指针变量 使用指针变量的例子 例  通过指针变量访问整型变量 int main() { int a = 100, b = 10;//定义整型变量a,b并初始化 int* p1, *...3.指针指向空间释放即使置NULL 4.避免返回局部变量的地址 5.指针使用之前检查有效性 指针运算 小时候我们就知道1+1等于几 那我问你如果是指针加1的话 加的是那个数字吗 ?

    2.3K20

    C语言指针

    指针的理解 1. 指针是一个值为内存地址的变量。 2. 指针本质上是地址,是计算机存放数据的空间。 3. 在通常情况下,我们把等号左边的指针理解成正常指针,把等号右边的指针理解成地址。...指针的声明  1. 指针使用之前需要声明。 2. 指针声明的同时,可以不初始化。...指向一级指针指针就是二级指针。 2. 二级指针里面存放的是一级指针的地址。...未初始化的指针就是野指针,野指针可以指向任何地方,可能会造成非法访问内存地址。 2. 野指针不会直接引发错误,操作野指针指向的内存区域才会出问题。 3. 尽量避免野指针的形成。...NULL 是C语言中定义的⼀个标识符常量,值是0,地址也是0,这个地址是无法使用的,读写该地址会报错。所以在解引用之前,必须确保它不是一个NULL指针。 4.

    1500

    C语言_初识C语言指针

    所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是一个字节。 一个存储单元可以存储一个字节, 也就是8个二进制位。...为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址 编号 = 地址 = 指针 指针变量 = 变量 = 存放地址的变量 ---- 一、指针 … 一个内存单元多大比较合适.../0 32位机器,上面有32根地址线 2的32次方个字节的空间 - - - 4,294,967,296 Byte — 4GB ---- 通过pa里存放的a的地址找到a ---- 三、指针变量的大小...指针变量是用来存放地址的 32位机器上:地址是32个二进制位,这个地址要存储的话要4个字节,所以在32位机器上,指针变量的大小是4个字节。...64位机器上:地址是64个二进制位,这个地址要存储的话要8个字节,所以在64位机器上,指针变量的大小是8个字节。

    19030

    C语言: 指针

    目录 概念: 指针的类型 指针的解引用 野指针指针的成因 空指针 指针与数组 指针在数组中的使用: 二级指针 ---- 概念: 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址...#include int main() { int a = 10;//在内存中开辟一块空间 int *p = &a;//这里我们对变量a,取出它的地址,可以使用&操作符。  ...1、指针初始化  2、小心越界访问 3、指针指向的空间释放 4、使用之前检查有效性 空指针 即是将指针置空 int* p = NULL; 指针与数组 #include <stdio.h...指针在数组中的使用: #include int main() { int arr[2] = { 1,2 }; int* p = arr; for (int i = 0; i...同样的,如果要获取指针指向的内容,要使用双重解引用 **

    2K70

    C语言指针

    学习 C 语言指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。...指针变量就是一种变量, 和其他种类的变量类似, 但指针和其他变量又有区别. 首先C语言作为一种类型语言, 每个变量都会有几个属性. 变量名称. 变量类型. 变量的值....Address stored in ip variable: bffd8b3c Value of *ip variable:20 类型 对于C语言来说, 搞清楚变量的类型相当重要, 涉及到指针的时候就更加重要...看到一个指针变量后需要理解其指向类型. 例如char * const * (*next)(), next是一个指针, 那么其指向类型是什么?...整个来说: next是一个指针, 指向一个函数, 函数的返回值也是一个指针, 指向一个类型为char的常量指针. C语言为类型语言, 即每个变量都有类型.

    2.7K20

    C语言 | 指向指针指针

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。...在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。...例82:C语言用指向指针指针的方法对n个整数排序并输出;要求将排序单独写成一个函数;n个整数在主函数中输入,最后在主函数中输出。...解题思路:读者看着道题的时候,首先要观察一下有什么规律,然后指向指针指针在上一道练习题中已经有了铺垫,读者可以联系上一道题去熟练使用指向指针指针。...C语言源代码演示: #include//头文件 int main()//主函数 { void sort(int **point,int number); //sort排序函数声明

    3K32

    C语言指针(三)函数指针

    函数指针 在我们定义函数的时候,编译器也会在内存空间给函数开辟一个内存,而该内存的首地址就是函数的内存地址,而函数指针就是指向该内存地址的。...3.1 函数 众所周知,C语言是面向过程的语言,或者称函数式编程。 而在C语言中,函数也确实起了很大的作用,在C语言的学习中,你见过最多的可能就是main函数,同时也是你第一个见得函数。...; return 是函数结束的关键字,返回值为0表示程序正确运行,为其他表示有其他异常 切记main函数不要void main(){},这个真的很重要 ❞ 3.2 指向函数的指针 见名知意,这个东西也是一个指针...定义: int (*funP)(int num1, int num2); // 定义一个函数,有两个整型参数 因为运算符优先级的存在,所以我们需要对变量名与*进行首先运算 使用: #include <stdio.h...num2); // 定义一个函数,有两个整型参数 funP = sum; // 将函数sum的地址给funP int ans = funP(1, 2); // 使用指针使用函数

    2K00

    C语言C语言数组和指针

    ---- 友情提醒:本文可能是全csdn最详细的指针内容了,希望你能用心读下去 前言 接下来的讲解部分是指针的进阶,包含多种指针以及对应的数组,这部分章节对我们来说很重要,也是c语言中的重点模块儿,重要性不言而喻...我们直接进入正题,开始我们今天重要的学习旅程吧 一、指针部分 1.字符指针: 在字符指针使用时,我们通常有两种使用的方式,前者是一般使用方式,后者是我们今天重点所讲部分 int main() {...(c/c++会把常量字符串储存到单独的一个内存区域中) 当这两个指针指向同一个常量字符串时,实际上就是指向同一块儿地址**(指针就是地址,地址就是指针)** 2.数组指针 2.1数组指针的定义 1.数组指针嘛...哈哈哈,但指针使用数组指针的场景其实不是这样的,这里只不过想用代码的样子给大家呈现一下,这个数组指针使用方法大概是什么样子的 下面的代码再较高级呈现一下,数组指针使用形式(坚持读下去,相信你自己)...,这个函数的返回类型是int型的指针,函数的参数是两个int 4.指向函数指针数组的指针 4.1概念解释: 这里的这个指针其实也就是个地址而已** 永远记住指针就是地址,地址就是指针** ,那这个地址究竟是什么

    64.7K37

    C语言指针进阶

    一、指针变量 指针变量有字符指针变量,数组指针变量和函数指针变量 1、字符指针变量 char* 叫做字符指针 一般这么来使用:通过指针存储指针后解引用访问 int main() { char c =...'a'; char* p = &c; *p = 'a'; return 0; } 另一种使用方式: 将字符串首字符h的地址放入pstr指针当中 int main() { const char...C++会把常量字符串存储到单独的⼀个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。...; } else { printf("请重新输入\n"); } } while (input); return 0; } 四、typedef 关键字讲解 typedef 是C语言中用来重命名的一个关键字...= 10; printf("%d", c); return 0; } 一个挺有意思的关键字,在以后工作和学习中,我们可以早早定义好比较常用的类型,提高工作效率 但是在其使用时,数组指针和函数指针的重命名和上述方法有一些不同

    6910
    领券