• malloc、calloc、relloc


    1、malloc

    void * malloc(size_t _Size);

    malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针。

    2、calloc

    void * calloc(size_t _Count, size_t _Size);

    calloc与malloc类似,负责在堆中分配内存。

    第一个参数是所需内存单元数量,第二个参数是每个内存单元的大小(单位:字节),calloc自动将分配的内存置为0。

    int *p = (int *)calloc(100, sizeof(int)); // 分配100个int

    3、ralloc

    重新分配用malloc或者calloc函数在堆中分配内存空间的大小。

    void * realloc(void *p, size_t _NewSize);

    第一个参数p为之前用malloc或者calloc分配的内存地址,_NewSize为重新分配内存的大小,单位:字节。

    成功返回新分配的堆内存地址,失败返回NULL。

    如果参数p等于NULL ,则malloc和calloc功能一致。

    4、free

    void free(void *p);
    free负责在堆中释放malloc和calloc分配的内存。参数p为malloc返回的堆中的地址。

    代码示例:

    int main()
    {
    	char *p = (char *)malloc(10); // 分配内存,但是没有赋初值
    	memset(p, 0, 10); // 这里需要手动赋值,下面的方法则不需要
    	char *p1 = (char *)calloc(10, sizeof(char)); // 分配内存,并自动设置为0
    
    	char *p2 = (char *)realloc(p1, 20); // 在原有内存基础上,在堆中间连续增加的内存
    	// 如果原有内存没有连续空间可拓展,那么会新分配一个空间,将原有内存copy到新空间,然后释放原有内存
    	// realloc和malloc,只分配内存,不进行赋值操作
    	
    	char *p3 = (char *)realloc(NULL, 5); // 等价于mallco(5)
    
    	free(p);
    	free(p1);
    	free(p2);
    	free(p3);
    	return 0;
    }



  • 相关阅读:
    20171012
    BZOJ[2563] 阿狸和桃子的游戏
    BZOJ[1028] [JSOI2007]麻将
    BZOJ[1972] [Sdoi2010]猪国杀
    BZOJ[1033] [ZJOI2008] 杀蚂蚁antbuster
    P5651 基础最短路练习题
    P3047 [USACO12FEB]Nearby Cows G
    P6190 魔法
    P2391 白雪皑皑 / BZOJ 2054 疯狂的馒头
    CSP 2020 J/S 初赛游记
  • 原文地址:https://www.cnblogs.com/zhangyaoqi/p/4591656.html
Copyright © 2020-2023  润新知