动态开内存malloc与calloc

malloc与calloc

1.函数原型

#include<stdlib.h>

void *malloc(unsigned int size);     //申请size字节的内存

void *calloc(unsigned int num, unsigned size);    //申请num*size字节的内存

2.函数的返回值为void*类型,使用时需强制转换为所需要的类型;

如果内存申请失败,则返回NULL,所以使用申请到的内存时需要先进行判断。

如:char* p = (char*)malloc(6 * sizeof(char));

3.申请的内存位于堆中,不再需要使用时,需调用free函数释放

void free(void *p);

注意:

1.void *与NULL

int *p=NULL;

void *p;

2.malloc与数组的比较:

(1)传给malloc函数的实参可以是一个表达式,从而可以“动态”申请一块内存;

(2)使用malloc函数申请的内存可以从函数中返回;而使用数组则不可以(存放在栈中,当函数返回时,内存已经被释放),示例代码如下:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     char* func1();
 6     char* func2();
 7     char* pf1;
 8     char* pf2;
 9     pf1 = func1();
10     pf2 = func2();
11     printf("%s\n", pf1);    //输出f1
12     printf("%s\n", pf2);    //输出乱码,错误信息-返回局部变量的地址
13 }
14
15 char* func1()
16 {
17     char* p = (char*)malloc(3 * sizeof(char));
18     if (p)
19     {
20         p[0] = ‘f‘;
21         p[1] = ‘1‘;
22         p[2] = ‘\0‘;
23         return p;
24     }
25     return NULL;
26 }
27
28 char* func2()
29 {
30     char p[3] = "f2";
31     return p;
32 }

原文地址:https://www.cnblogs.com/ben-/p/11277271.html

时间: 2024-10-10 01:15:08

动态开内存malloc与calloc的相关文章

内存控制篇calloc free getpagesize malloc mmap munmap

calloc(配置内存空间) 相关函数 malloc,free,realloc,brk 表头文件 #include <stdlib.h> 定义函数 void *calloc(size_t nmemb,size_t size); 函数说明 calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针.这和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化为0. 返回值 若配置成功则返回

malloc()与calloc区别

1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域.函数的返回值为该区域的首地址. “类型说明符”表示把该区域用于何种数据类型.(类型说明符*)表示把返回值强制转换为该类型指针.“size”是一个无符号数.例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针

malloc realloc calloc free

自上次发现自己对这几个C函数不熟悉,就打算抽空整理一下,也就现在吧.这几个函数都是跟堆内存打交道的,还有一个好玩的函数--alloca,它是跟栈内存打交道的,我想留在以后研究出好玩点的来,再专门为其写一篇铭文. 1.malloc: 头文件:<stdlib.h> 原型:extern void *malloc(unsigned int num_bytes); 功能:分配长度为num_bytes字节的内存块.如果分配成功则返回指向被分配内存的指针,否则返回NULL. 机理:malloc函数的实质体现

malloc,calloc,realloc

三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函数库内 它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL 1.  malloc用于申请一段新的地址,参数size为需要内存空间的长度,如: char* p; p=(char*)mal

malloc、calloc、realloc的区别

(1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2>在栈上创建       在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. <3>从堆上分配,亦称动态内存分配.       程序在运行的时候用malloc或new申请任意多少的内存

malloc()与calloc差别

Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other. Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from

C malloc和calloc函数总结

malloc和calloc可以动态的分配内存,即:编译的时候不会分配内存运行的时候才会分配内存.很像高级语言中的new关键字. 这样的好处自然是不用多说.现在对他们的用法及注意点进行总结: 先看malloc,代码如下: #include <stdio.h> #include <stdlib.h> #define N 5 int main() {     int i = 0;     int * nums;     nums = (int *)malloc(N*sizeof(int)

xdoj1065 Efficent Allocation 动态开点的线段树

xdoj1065 Efficent Allocation  动态开点的线段树 1065: Efficent Allocation 时间限制: 8 Sec  内存限制: 256 MB提交: 24  解决: 3[提交][状态][讨论版] 题目描述 由于XDOJ评测机的一些奇怪行为,本题时限调整到8s. lx正在写一个内存分配器,支持下列操作: (1) malloc(size),分配一个大小为size字节的内存块,返回指向该内存块的指针. (2) free(p),释放起始地址是p的内存块. lx使用的

malloc()与calloc差异

Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other. Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from