1. 程式人生 > >C和指標之動態記憶體分配之(編寫calloc函式,函式內部使用malloc函式來獲取記憶體)

C和指標之動態記憶體分配之(編寫calloc函式,函式內部使用malloc函式來獲取記憶體)

1、問題

編寫calloc函式,函式內部使用malloc函式來獲取記憶體


2、程式碼實現

#include <stdio.h>
#include <stdlib.h>

void *my_calloc(size_t nums, size_t element_size)
{
    int i, all_size;
    all_size = nums * element_size;
    char *p = NULL;
    p = malloc(all_size);
    if (p == NULL)
        return NULL;
    for (i = 0; i < all_size; ++i)
        p[i] = 0;
    return p;
}

int main()
{
    char *p = my_calloc(10, sizeof(char));
    if (p != NULL)
    {
        for (int i = 0; i < 10; ++i)
        {
             printf("p[%d] is %d\n", i, p[i]);
        }
        free(p);
    }
    int *p_int = my_calloc(10, sizeof(int));
    if (p_int != NULL)
    {
        for (int i = 0; i < 10; ++i)
        {
             printf("p_int[%d] is %d\n", i, p_int[i]);
        }
        free(p_int);
    }
    return 0;
}




3、執行結果

1111deMacBook-Pro:malloc a1111$ vim calloc.c
1111deMacBook-Pro:malloc a1111$ gcc -g calloc.c -o calloc
1111deMacBook-Pro:malloc a1111$ ./calloc
p[0] is 0
p[1] is 0
p[2] is 0
p[3] is 0
p[4] is 0
p[5] is 0
p[6] is 0
p[7] is 0
p[8] is 0
p[9] is 0
p_int[0] is 0
p_int[1] is 0
p_int[2] is 0
p_int[3] is 0
p_int[4] is 0
p_int[5] is 0
p_int[6] is 0
p_int[7] is 0
p_int[8] is 0
p_int[9] is 0