溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

malloc、free、realloc、calloc函數(shù)

發(fā)布時間:2020-08-08 08:59:03 來源:網(wǎng)絡(luò) 閱讀:399 作者:村雨1943 欄目:編程語言

malloc函數(shù)


  • 原型:extern void* malloc(unsigned int size);
  • 功能:動態(tài)分配內(nèi)存;
  • 注意:size僅僅為申請內(nèi)存字節(jié)大小,與申請內(nèi)存塊中存儲的數(shù)據(jù)類型無關(guān),故編程時需要通過以下方式給出:"長度 * sizeof(數(shù)據(jù)類型)";

  • 示例
//動態(tài)分配內(nèi)存,輸入5個數(shù)據(jù),并把低于60的值打印出來

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *ptr = (int *)malloc(5 * sizeof(int));//分配內(nèi)存

    for (int i = 0; i < 5; i++)
        {
            scanf_s("%d", &ptr[i]);//輸入數(shù)據(jù)
        }

    int min = 60;

    for (int i = 0; i < 5; i++)
    {
        if (min > *(ptr + i))
            printf("%5d", *(ptr + i));//打印出低于60的值
    }
    free(ptr);
    system("pause");
    return 0;
}

free函數(shù)

  • 原型:void free(void * ptr);
  • 功能:搭配malloc()函數(shù),釋放malloc函數(shù)申請的動態(tài)內(nèi)存;
  • 注意:對于free(ptr),若ptr為NULL,則可進(jìn)行多次釋放,若ptr是非空指針,則free對ptr只能進(jìn)行一次操作,否則程序?qū)⒈罎ⅲ?/li>
  • 示例:見malloc函數(shù);
  • 結(jié)果:見malloc函數(shù);

realloc函數(shù)

  • 原型: void realloc(void ptr,unsigned int size);
  • 功能:先判斷當(dāng)前指針是否有足夠的連續(xù)空間,若足夠,擴(kuò)大ptr指向的地址并返回,若不夠,怎按size指定的大小分配空間,將原數(shù)據(jù)copy到新分配的內(nèi)存中,然后釋放原ptr所指向區(qū)域;
  • 注意:內(nèi)存使用完畢后,應(yīng)使用free()函數(shù)釋放,但原來的指針是自動釋放,不需要使用free;

  • 示例:
#include <stdio.h>
#include <stdlib.h>

int main()
{
   char *str;

    /* 一開始的內(nèi)存分配 */
    str = (char *)malloc(15);
    strcpy(str, "Hello World!");
    printf("String = %s\n", str);

    /* 重新分配內(nèi)存 */
    str = (char *)realloc(str, 25);
    strcat(str, ", C");
    printf("String = %s\n", str);

    free(str);
    system("pause");
    return 0;
}

calloc函數(shù)

  • 原型:void* calloc(unsigned int num,unsigned int size);
  • 功能:為已經(jīng)分配的內(nèi)存重新分配空間并復(fù)制內(nèi)容;
  • 注意:num:對象個數(shù),size:對象占據(jù)的內(nèi)存字節(jié)數(shù),相較于malloc函數(shù),calloc函數(shù)會自動將內(nèi)存初始化為0;

  • 示例:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num;
    int i;
    int *ptr;

    printf("元素個數(shù)為:");
    scanf("%d", &num);

    ptr = (int*)calloc(num, sizeof(int));
    printf("輸入 %d 個數(shù)字:\n", num);
    for (i = 0; i < num; i++)
    {
        scanf("%d", &ptr[i]);
    }

    printf("輸入的數(shù)字為:");
    for (i = 0; i < num; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");
    system("pause");
    return 0;
}

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI