美文网首页
malloc calloc realloc开辟堆空间

malloc calloc realloc开辟堆空间

作者: 李永开 | 来源:发表于2021-07-14 16:20 被阅读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
}

相关文章

网友评论

      本文标题:malloc calloc realloc开辟堆空间

      本文链接:https://www.haomeiwen.com/subject/plicpltx.html