malloc calloc realloc开辟堆空间

2021-07-14  本文已影响0人  李永开

一. calloc

calloc 开辟空间后,会将内存置为0

//
//  main.c
//  cdemo
//
//  Created by liyongkai on 2021/6/6.
//

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



int main(int argc, const char * argv[]) {
  
    int *p = calloc(10, sizeof(int));
    
    for (int i = 0; i < 10; i ++) {
        p[i] = i;
    }
    
    for (int i = 0; i < 10; i ++) {
        printf("%d", p[i]);
    }
    
    if (NULL != p) {
        free(p);
        p = NULL;
    }
    
    //0123456789
}

二.realloc

如果增加内存空间成功,则和malloc一样
如果增加内存空间失败,realloc会重新申请一块空间并把数据拷贝到新空间

int main(int argc, const char * argv[]) {
  
    int *p = malloc(sizeof(int) * 5);
    printf("p的指针%p",p);//p的指针0x1078ba950

    int *pp = malloc(sizeof(int) * 100);//如果加上这个pp,会发现p的内存地址变了.
    
    p = realloc(p, sizeof(int) * 10);
    printf("p的指针%p",p);//p的指针0x107a17750
}
上一篇 下一篇

猜你喜欢

热点阅读