首页 > 试题广场 >

下列关于内存分配和释放的函数及其区别描述正确的有?

[不定项选择题]
下列关于内存分配和释放的函数及其区别描述正确的有?
  • C++语言的标准内存分配函数:malloc,calloc,realloc,free等。
  • C语言的标准内存分配函数为new/delete。
  • malloc和calloc的区别是1块与n块的区别和初始化
  • realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小扩容到size。
我还以为是不正确的是?太粗心了
发表于 2015-12-13 22:38:23 回复(1)
更多回答
CD
1. malloc,calloc,realloc,free属于C函数库,而new/delete则是C++函数库;
2. 多个-alloc的比较:
    alloc:唯一在栈上申请内存的,无需释放;
    malloc:在堆上申请内存,最常用;
    calloc:malloc+初始化为0;
    realloc:将原本申请的内存区域扩容,参数size大小即为扩容后大小,因此此函数要求size大小必须大于ptr内存大小。
编辑于 2019-12-23 20:34:51 回复(11)
感觉C有问题,malloc和calloc分配的都是一个内存块,calloc是将内存块初始化为0
发表于 2017-09-19 11:25:21 回复(1)
都包含在头文件 <stdlib.h>

malloc:

void *malloc(size_t _size)

成功返回申请的堆空间地址,失败返回NULL。

不会对申请空间初始化,值随机,可能遗留之前分配过的历史数据。

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    int *a = (int*)malloc(10 * sizeof(int));
    if (a == nullptr)
    cout << "malloc fail" << endl;
    free(a);
    getchar();
    return 0;
}


calloc:

void *calloc(size_t nmemb,size_t size)

nmemb为申请元素的数目,size为元素的大小,相乘即为分配空间。

成功返回申请的地址,失败返回NULL。

会对申请空间清零。

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
    int *a = (int*)calloc(10 , sizeof(int));
    if (a == nullptr)
    cout << "calloc fail" << endl;
    free(a);
    getchar();
    return 0;
}
realloc:

void *realloc(void *ptr,size_t size)

扩容原有内存的大小。ptr表示扩容前的指针,是之前用malloc或者calloc申请的地址。或ptr等于nullptr,等同于malloc。size表示扩容后的内存大小。

返回值:失败返回NULL,成功返回地址。如果地址与ptr相同,证明原空间后申请,不同,可能后续空间不足,重新申请。

申请失败,之前的内存并不会释放。

#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
   char *str = (char *) malloc(15);
   strcpy(str, "realloc");
   str = (char *) realloc(str, 25);
   strcat(str, "success");
   cout<<str<<endl;
   free(str);
   getchar();
   return 0;
}


发表于 2019-04-22 21:48:40 回复(0)
malloc,calloc,realloc,free属于C函数库
而new/delete则是C++函数库
发表于 2022-03-11 20:08:24 回复(0)
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。可以排除ab选项。由于是多选,答案就是cd
发表于 2016-08-03 16:11:12 回复(0)
C中的一块与n块 的区别怎么理解???
发表于 2015-09-23 09:54:07 回复(2)
CD 1. malloc,calloc,realloc,free属于C函数库,而new/delete则是C++函数库; 2.&nbsp;多个-alloc的比较: &nbsp;&nbsp;&nbsp;&nbsp;alloc:唯一在栈上申请内存的,无需释放; &nbsp;&nbsp;&nbsp;&nbsp;malloc:在堆上申请内存,最常用; &nbsp;&nbsp;&nbsp;&nbsp;calloc:malloc+初始化为0; &nbsp;&nbsp;&nbsp;&nbsp;realloc:将原本申请的内存区域扩容,参数size大小即为扩容后大小,因此此函数要求size大小必须大于ptr内存大小。 malloc的函数原型:void* malloc (size_t size);申请1*size大小的空间 calloc的函数原型:void* calloc (size_t num, size_t size);申请num * size大小的空间 即1块 和 n块
编辑于 2018-11-28 17:03:39 回复(0)
其实题有问题realloc得size可大可小
发表于 2017-11-21 00:38:26 回复(1)
感觉题不严谨,根据 C和指针 的说法realloc的功能是改变内存块,可以增加也可以减小。
发表于 2017-03-14 22:47:29 回复(0)
都说A是C中的,但C++关于内存使用的就只有new/delete两个操作符,意思是C++没有内存分配库函数了?再说了new/delete也是使用了C的内存分配/释放函数,只是多了构造/析构的过程而已。这么严格区分毫无意义
发表于 2016-09-17 15:09:52 回复(1)
函数原型:void *calloc(size_t n, size_t size); 功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。 malloc,relloc,calloc,free是C语言的; new,delete是C++; relloc动态内存调整, 指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。 新的大小可大可小(但是要注意,如果新的大小小于原内存大小,可能会导致数据丢失,慎用!)
编辑于 2016-01-21 10:27:27 回复(1)
  1. malloc用于分配指定字节数的内存块,返回一个指向该内存块起始地址的指针。这个内存块中的初始值是不确定的。

  2. calloc用于分配指定数量、指定大小的内存块,并将每个字节都初始化为零。它返回一个指向该内存块起始地址的指针。

  3. realloc用于重新分配先前分配的内存块的大小。如果原内存块的大小小于或等于新分配的大小,则原内存块的内容将被复制到新的内存块中;否则,原内存块的一部分内容将丢失。

发表于 2023-10-24 16:41:31 回复(0)
A选项中  不是C++兼容C吗 不就是C有的 C++也会有 但是C有的C++不会有???
发表于 2017-06-28 08:40:13 回复(3)
calloc也是申请一块连续的内存空间啊
发表于 2016-09-12 14:55:27 回复(1)
D (类型*)realloc(*ptr,size),写错了吧, 这里传指针的时候不用解引用啊
编辑于 2024-01-16 00:04:31 回复(1)
稍微不细看就不行
发表于 2023-11-23 19:07:50 回复(0)
AB搞混了,C中标准内存分配函数是malloc calloc realloc free,C++标准内存分配函数是:new/delete
       void *malloc(size_t size);
       void free(void *ptr);
       void *calloc(size_t nmemb, size_t size);
       void *realloc(void *ptr, size_t size);


发表于 2023-09-15 17:34:32 回复(0)
A中free是释放函数
发表于 2023-05-10 21:34:56 回复(0)
new/delete是吃c++定义的关键字,不是函数
发表于 2022-06-07 12:05:51 回复(0)