首页 > 试题广场 >

关于内存管理,以下有误的是()

[单选题]
关于内存管理,以下有误的是()
  • malloc在分配内存空间大小的时候是以字节为单位。
  • 如果原有空间地址后面还有足够的空闲空间用来分配,则将先前空间释放,然后以先前地址为开始地址按newSize大小重新分配
  • 如果原有空间地址后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存,并把先前内存空间中的数据复制 到新的的newSize大小的空间中,然后将之前空间释放
  • free函数的作用是释放内存,内存释放是标记删除,会修改当前空间的所属状态,并且会清除空间内容
推荐
D
本题主要考察内存中堆区域的操作函数。
1> malloc,作用是开辟一个给定字节大小的堆区域空间,并且返回该内存空间的首地址。
 void *malloc(unsigned int size);因此A项正确。
2> calloc,作用是分配n个size⼤⼩的空间,并且把该内存上的所有字节清零。
void *calloc(unsigned n,unsigned size);
3> realloc,作用是按给定的地址以及给定的⼤小重新分配。
void *realloc(void *, unsigned newSize);
分配时有两种情况:
1.如果原有空间地址后面还有足够的空闲空间用来分配,则将先前空间释放,然后以先前地址为开始地址按newSize大小重新分配。因此B项正确。
2.如果原有空间地址后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize⼤小的内存,并把先前内存空间中的数据复制到新的newSize⼤小的空间中,然后将之前空间释放。因此C项正确。
4> free函数,作用是释放内存,内存释放是标记删除, 只会修改当前空间的所属状态,并不会清除空间内容。free函数并不会清除空间内容。因此D项描述错误。
综上,选D。

编辑于 2019-12-27 14:18:21 回复(0)
D
  • 选项A:malloc函数用来动态地分配内存空间,其原型void* malloc (size_t size); size 为需要分配的内存空间的大小,以字节(Byte)计。所以A正确
  • 选项B:realloc函数,其原型extern void *realloc(void *mem_address, unsigned int newsize);如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address。realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,即如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize,得到的是一块连续的内存。所以B正确
  • 选项C:realloc函数,如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存,并把原来大小内存空间中的内容复制到newsize中,返回新的mem_address指针,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。所以C正确
  • 选项Dfree函数,作用是释放内存,内存释放是标记删除, 只会修改当前空间的所属状态,并不会清除空间内容。所以D错误
发表于 2019-12-26 21:56:35 回复(0)
free函数并不会清除空间内容
发表于 2021-12-05 14:45:14 回复(0)
realloc是把先前位置释放再创建,而不是先创建再释放?
发表于 2022-09-07 08:57:25 回复(0)
B原来的位置有足够空间应该是直接追加吧,怎么可能重新分配
发表于 2023-10-13 11:13:16 回复(0)