动态开内存malloc与calloc

Posted ben-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态开内存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 

 

以上是关于动态开内存malloc与calloc的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法基础之malloc()动态分配内存概述

内存动态分配与释放

二动态内存分配与使用

内存动态分配之realloc(),malloc(),calloc()与new运算符

new 与malloc的区别

动态内存分配malloc与new的区别