c++ 指针基础问题 指针已经被初始化为NULL了,为啥还会出错?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 指针基础问题 指针已经被初始化为NULL了,为啥还会出错?相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;
void func2(int *value)

*value = 2;

void func1()

int *p =NULL;
func2(p);

int main()

func1();
return 0;

你虽然初始化为NULL了,但你没有给他分配内存空间啊,所以会报错,你在调用func2(p);之前先给p分配空间p=new int; 参考技术A 就是因为初始化成NULL了才会出错啊,func1传给func2一个空指针,func2试图对其解引用于是就出错了。 参考技术B int *p =NULL,没有开辟内存,所以在调用func2()函数时不能将 &2 赋给p.

指针变量初始化为NULL啥意思?

将指针初始化NULL即将指针初始化为0。
NULL宏是定义在标准库头文件stddef.h中。宏定义如下:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
可以看出c++中
NULL为(int)0
,
C中NULL为(void*)0。看来C和C++中NULL宏的值略有不同。
参考技术A NULL的定义是这样的

#define NULL ((void *)0)

应用程序是不能访问0地址的,所以可以用0地址来表示一个空指针。

if(ptr != NULL)/*确保指针已经被初始化*/

以上是关于c++ 指针基础问题 指针已经被初始化为NULL了,为啥还会出错?的主要内容,如果未能解决你的问题,请参考以下文章

指针变量初始化为NULL啥意思

C++语法(指针和引用的区别)

定义指针变量时,必须将指针变量初始化为NULL(为空),否则,指针变量会由于初始化位置的不确定

指针初始化为NULL的作用

🔥iOS中野指针问题叙述

C - 为什么指针常常初始化为 NULL?