黑马程序员技术交流社区

标题: 常见的内存分配函数 [打印本页]

作者: 董立正    时间: 2015-12-5 10:48
标题: 常见的内存分配函数
/*

malloc

void * malloc(unsigned size);
从内存的堆区分配大小为size个字节的连续空间
如果分配成功,返回内存首地址,否,返回NULL

calloc

calloc(块数,长度);
分配多少块,长度为多少的内存空间
地址连续
可以自动初始化为0

relloc


如果有足够相邻空间,重新分配需求大小空间,将原有数据复制到新空间
如果有足够相邻空间,直接扩充连接空间



*/

#include <stdio.h>
#include <stdlib.h>
void test1(){
    int *p = (int *)malloc(4*sizeof(int));
    memset(p,48,16);//初始化
    if (p != NULL) {
        //        *p = 10;
        //        *(p+1) = 100;
        //        *(p+2) = 1000;
        //        *(p+3) = 10000;
    }else{
        printf("内存申请失败!\n");
    }
    for (int i = 0; i < 4; i++) {
        printf("%c\t",*(p+i));
    }
}

void test2(){
    int *p = (int *)calloc(4,sizeof(int));
    if (p != NULL) {
        //                *p = 10;
        //                *(p+1) = 100;
        //                *(p+2) = 1000;
        //                *(p+3) = 10000;
    }else{
        printf("内存申请失败!\n");
    }
    for (int i = 0; i < 4; i++) {
        printf("%d\t",*(p+i));
    }

}
int main(int argc, const char * argv[]) {
    int *p = (int *)calloc(4,sizeof(int));
    printf("old %p\n",p);
    p = realloc(p, 40*sizeof(int));
    printf("new %p\n",p);
    if (p != NULL) {
        //                *p = 10;
        //                *(p+1) = 100;
        //                *(p+2) = 1000;
        //                *(p+3) = 10000;
    }else{
        printf("内存申请失败!\n");
    }
    for (int i = 0; i < 4; i++) {
        printf("%d\t",*(p+i));
    }

        return 0;
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2