首页 > 试题广场 >

下面有关空指针和未初始化指针,说法错误的是?

[单选题]
下面有关空指针和未初始化指针,说法错误的是?
  • 对0x0这个地址取值是非法的
  • 空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。
  • 空指针与任何对象或函数的指针值都不相等
  • malloc在其内存分配失败时返回的是一个未初始化的指针
D 空指针的作用就是一个在定义中不指向任何类型的指针, 但是未初始化的指针就不同,它是一个声明了指向类型的指针,虽然在一开始没有固定的指向,但是,当我们赋给的值不与之前声明的类型相一致时,将会出现错误。
发表于 2015-08-29 21:49:32 回复(0)
更多回答
推荐
D
这个大概大家都知道,空指针与野指针的区别,空指针也就是通常指向为NULL的指针,野指针就是指向一块未知的内存区域(可以是通过malloc或new申请空间后,释放后没有将指针置为空),也有可能定义了一个指针没有初始化,由于内存空间中的值在未赋值之前是随机数,所以也有可能诞生野指针。
就上面这道题目而言:
A肯定是对的,无法为内存为0的地址取地址
B也是对的咯
C空指针的值肯定是NULL,也就是0,而其他指针都有对象了,有对象就有地址,有地址也就有值了,所以两个值是不可能相等的
Dmalloc申请内存空间失败的时候,人家返回的值为NULL,而不是任意的。
编辑于 2016-01-03 18:48:59 回复(5)
malloc函数为C语言中的标准函数,标准中规定:在分配内存失败时会返回“NULL Pointer”空指针,而非为初始化的指针。
C++在分配内存失败时会抛出BAD_ALLOC异常。
野指针:指向垃圾内存的指针,而非空指针。
野指针产生原因:
    1.声明的指针未被初始化,指针默认值随机产生。创建指针应该将其初始化为NULL或者指向某一内存。
    2.free和delete掉的指针未重置为NULL,free后的指针仍指向该内存,但该内存已变为垃圾内存。
另:空指针不指向任何实际的对象或函数,反过来说对象或函数的指针也不可能为空指针。

发表于 2016-01-03 09:51:09 回复(0)
malloc在内存分配失败时返回的是空指针,即NULL,而不是未初始化指针。
发表于 2017-01-16 08:18:00 回复(0)
首先要弄清一个基本事实,
系统分配是不会把地址0分配给你的,不管是栈上还是堆上,不管是auto还是static
你不会得到首地址为0的变量。
然后你无法给指定地址块赋值,以下操作非法:
int *p = 0x12345678;
*p = 13;

发表于 2016-06-17 17:46:00 回复(1)
D malloc失败,返回NULL
发表于 2015-04-28 16:24:23 回复(0)
malloc在其内存分配失败时返回的是一个null_ptr
发表于 2022-03-07 13:51:34 回复(0)
    整理来自牛友:
    空指针与野指针的区别:空指针也就是通常指向为NULL的指针,野指针就是指向一块未知的内存区域(可以是通过malloc或new申请空间后,释放后没有将指针置为空),也有可能定义了一个指针没有初始化,由于内存空间中的值在未赋值之前是随机数,所以也有可能诞生野指针。
    malloc函数为C语言中的标准函数,标准中规定:在分配内存失败时会返回“NULL Pointer”空指针,而非为初始化的指针。
C++在分配内存失败时会抛出BAD_ALLOC异常。
野指针:指向垃圾内存的指针,而非空指针。
野指针产生原因:
    1.声明的指针未被初始化,指针默认值随机产生。创建指针应该将其初始化为NULL或者指向某一内存。
    2.free和delete掉的指针未重置为NULL,free后的指针仍指向该内存,但该内存已变为垃圾内存。
    另:空指针不指向任何实际的对象或函数,反过来说对象或函数的指针也不可能为空指针。
编辑于 2017-05-25 16:33:27 回复(0)
mallc在其内存分配失败时返回的是NULL
发表于 2017-01-06 20:23:53 回复(0)
D说法错误,内存分配失败返回空指针NULL;
发表于 2015-09-24 10:37:37 回复(0)
对于A,char *str = NULL; &(*str)的取值就为空指针。
对于D,malloc在分配内存失败时返回的NULL。

虽然为单选题,本题应该选AD
发表于 2015-01-30 15:25:18 回复(3)

答案D是错误的。

malloc函数在C语言中用于动态分配内存。当malloc成功分配内存时,它返回一个指向分配的内存块的指针。如果内存分配失败(例如,由于没有足够的可用内存),malloc不会返回一个未初始化的指针,而是返回一个特殊的指针值:NULL。NULL是标准C库中定义的一个宏,通常被定义为((void *)0),表示空指针。因此,malloc在内存分配失败时返回的是空指针,而不是未初始化的指针。

让我们来看看其他选项:

A. 对0x0这个地址取值是非法的 这是正确的。0x0通常是空指针的表示方式,在大多数系统上,试图解引用空指针(即对地址0x0进行取值)会导致程序崩溃或产生一个运行时错误。

B. 空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。 这也是正确的。空指针是一个明确不指向任何有效内存地址的指针,而未初始化的指针可能包含任意值,这可能是一个随机的内存地址,其行为是未定义的。

C. 空指针与任何对象或函数的指针值都不相等 这同样是正确的。根据C语言标准,空指针不指向任何对象或函数,因此它不可能等于指向有效对象或函数的指针。

编辑于 2023-12-05 19:45:39 回复(0)
如果分配内存失败,则返回的指针值为NULL,而不是未初始化的,做题时一定要注意。
发表于 2016-05-18 22:02:15 回复(0)
空指针在概念上不同于未初始化的指针:空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方。
发表于 2014-11-14 16:11:30 回复(0)
对空指针取值是非法的,重新赋地址是合法的
发表于 2022-11-22 08:35:06 回复(0)
咋看都不可以给你一个为初始化的指针呀,要是我是这个函数的设计者的话,这不是增加程序崩溃的概率吗额。。。
malloc 失败返回NULL

发表于 2022-10-06 09:52:29 回复(0)
malloc在其内存分配失败时返回的是一个空指针,而不是未初始化的指针(野指针)
发表于 2022-06-29 08:48:18 回复(0)
malloc在其内存分配失败时返回的是一个空指针,而不是未初始化的指针(野指针)
发表于 2022-03-04 09:41:10 回复(0)
malloc申请内存空间失败,返回的是NULL,而不是任意值。
发表于 2021-12-12 09:37:13 回复(0)
我觉得挺好的
发表于 2021-02-12 10:26:21 回复(0)
malloc申请内存空间失败的时候,返回的是空指针;申请成功,不对申请的存储空间进行初始化(野指针)
发表于 2020-04-16 21:35:52 回复(0)
malloc如果失败的话,返回的是空指针
空指针与野指针是有一定区别的
发表于 2020-01-29 10:07:20 回复(0)