b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C语言中的Malloc()和calloc()c函数用法

电脑杂谈  发布时间:2020-06-22 06:22:47  来源:网络整理

ifstream 头文件_calloc头文件_include头文件

无效* malloc(int size);

描述: malloc适用于系统分配指定大小的字节的内存空间. 返回类型为void *. void *表示类型不确定的指针. C,C ++规定void *类型可以强制转换为任何其他类型的指针.

可以从函数声明中看到. malloc和new之间至少有两个区别: new返回指定类型的指针,并且可以自动计算所需的大小. 例如:

int * p;

p =新的int; //返回类型为int *类型(整数指针),分配大小为sizeof(int);

或者:

int * parr;

parr = new int [100]; //返回类型为int *类型(整数指针),分配大小为sizeof(int)* 100;

Malloc必须由我们计算,并且在转换之后,它会被强制转换为实际类型的指针.

ifstream 头文件_include头文件_calloc头文件

int * p;

p =(int *)malloc(sizeof(int));

首先,malloc函数返回一个void *类型. 如果您写: p = malloc(sizeof(int));则无法编译程序并报告错误: “无法将void *分配给int *类型变量”. 因此calloc头文件,必须使用(int *)进行投射.

第二,该函数的实际参数是sizeof(int),用于指示整数数据的大小. 如果您写:

int * p =(int *)malloc(1);

也可以编译代码,但是实际上,只分配了1个字节的内存空间. 当您在其中存储一个整数时,将有3个字节的无家可归,并直接“居住在”邻居中!”结果是清除了后续存储器中的所有原始数据内容.

malloc还可以达到new []的效果,申请一个连续的内存,该方法只是指定所需的内存大小.

例如,如果您要分配100个int类型的空间:

int * p =(int *)malloc(sizeof(int)* 100); //分配可以容纳100个整数的内存空间.

include头文件_ifstream 头文件_calloc头文件

无法直接看到的另一点是,malloc仅分配内存,而无法初始化结果内存,因此在获得的新内存中,其值将是随机的.

除了分配和最终释放的不同方法外,还可以通过malloc或new获取指针,并使其在其他操作中保持一致.

============================================

原型: extern void * malloc(unsigned int num_bytes);

用法: #include

或#include

功能: 分配长度为num_bytes个字节的内存块

描述: 如果分配成功,则返回指向已分配内存的指针,否则返回空指针NULL.

当不再使用内存时,应使用free()函数释放内存块.

ifstream 头文件_calloc头文件_include头文件

malloc的语法是: 指针名=(数据类型*)malloc(长度)calloc头文件,(数据类型*)表示指针.

示例:

// malloc.c

#include

#include

main()

{

字符* p;

clrscr(); //清除屏幕

include头文件_ifstream 头文件_calloc头文件

p =(char *)malloc(100);

if(p)

printf(“内存分配在: %x”,p);

其他

printf(“内存不足!\ n”);

free(p);

getchar();

返回0;

}

============================================

malloc()函数的工作机制

malloc函数的本质是它具有一个所谓的空闲列表,该空闲列表将可用的内存块连接到一个长列表中. 调用malloc函数时,它将在连接表中查找足以满足用户请求的内存块. 然后,将存储块分为两部分(一个块的大小等于用户请求的大小,另一个块的大小为剩余字节). 接下来,将分配给用户的内存传递给用户,然后将剩余的内存(如果有)返回到连接表. 调用free函数时,它将用户释放的存储块连接到free链. 最后,自由链将被切成许多小内存片段. 如果用户此时申请较大的内存碎片,则自由链上可能没有满足用户要求的碎片. 因此,malloc函数请求一个延迟,并开始检查自由链上的内存片段,对它们进行排序,然后将相邻的较小的空闲块合并为较大的内存块.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-254195-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...