c语言动态申请内存之malloc与calloc

码农公社  210.net.cn   210= 1024  10月24日一个重要的节日--码农(程序员)节

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函数申请的内存可以从函数中返回;而使用数组则不可以(存放在栈中,当函数返回时,内存已经被释放),

示例代码如下:


#include<stdio.h>
#include<stdlib.h>
int main()
{
    char* func1();
    char* func2();
    char* pf1;
    char* pf2;
    pf1 = func1();
    pf2 = func2();
    printf("%s\n", pf1);    //输出f1
    printf("%s\n", pf2);    //输出乱码,错误信息-返回局部变量的地址
}

char* func1()
{
    char* p = (char*)malloc(3 * sizeof(char));
    if (p)
    {
        p[0] = 'f';
        p[1] = '1';
        p[2] = '\0';
        return p;
    }
    return NULL;
}

char* func2()
{
    char p[3] = "f2";
    return p;
}


资料来自网络,如有侵权请联系删除

评论