A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qinyawan 初级黑马   /  2015-11-24 12:56  /  565 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//    堆区的内存分配
//    手动开辟内存
//    void *malloc(size);
//    返回值类型:void*,泛类型,可以转换成其他类型指针,函数返回的是一个指针
//    malloc:函数名
//    size:所要分配的内存大小(字节数),无符号整型
//    char *p = malloc(7);
//    strcpy(p, "iPhone");
//    *p = 66;
//    p[3] = '\0';
//    strcpy(p + 2, "abcde");//越界
//    strcpy(p, p + 2);//hone
    char *p = malloc(7);//栈区分配8个内存空间  在堆区分配7个字节把堆区的首地址存放在栈区内容中,&p是栈区的首地址
    strcpy(p, "iPhone"); //常量区分配7个字节拷贝到对应栈区中
    char *p1 = "iPhone";//拷贝的是地址 指向常量区 内容不能被修改
    char string[] = "iPhone";//拷贝的是内容 拷贝到栈区中,在栈区中的内容是可以被修改的
        //创建一个栈区指针,指向堆区所分配的6个字节的首地址
//    int *p = malloc(6);
        //把常量区整型常量10,拷贝到堆区前四个字节
//    *p = 10;
//    p[1] = 20;//error,越界   
//free(void *)释放内存函数
// void * :可以接受各种类型的指针
//内存泄露:一块内存一直被占用,得不到释放
//free会把malloc申请是内存释放(重新标记成可用)
//    free(p);
        //申请一个内存空间随机赋10个整数放在数组中
//    int *p = malloc(sizeof(int) * 10);
//    for (int i = 0; i < 10; i++) {
//        *(p + i) = arc4random() % 21 + 10;
//        printf("%d ", *(p + i));
//    }
//    free(p);
//        //释放后p现在还有内容
//    p = NULL;//把指针置空
//    int *p = malloc(2);//内存泄露
//    p = malloc(4);
//    free(p);

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马