0038 内存分配

/*
   C语言中提供了3个动态内存分配函数:
 
    1)malloc 函数
 
      格式: void * malloc(unsigned size);
 
      从内存的堆区分配大小为size个字节的连续的内存空间
      如果内存分配成功  返回内存的首地址
 
                失败  NULL
 
 
 
 
 
 
 */


#include <stdio.h>
#include <stdlib.h>
/**
 *  malloc函数的使用
 */
void test1(){

    //从内存中申请一块内存空间,可以存储4个整数
    // = 赋值,要求等号的左右两侧的类型要一致
    //p中存放的事新申请的内存空间的首地址
    //注意:malloc 申请的内存空间,如果我们不赋值?
    //     是垃圾数
    int *p = (int *)malloc(4*sizeof(int));   //16个字节
    
    //使用一个函数给malloc申请的空间进行初始化
    memset(p,'a',16);
    
    if (p!=NULL) {
        
        //申请成功做的事情
        //        *p = 10;
        //        *(p+1) = 100;
        //        *(p+2) = 1000;
        //        *(p+3) = 10000;   //存放4个整数
        
    }else{
        //内存申请失败
        printf("内存申请失败!
");
        
    }
    
    for(int i=0;i<4 ;i++){
        
        printf("%c	",*(p+i));
        
    }

}


void test2(){


    //callloc 分配指定块数和长度的内存空间
    //格式:calloc(块数,长度)
    //分配了4块,每一块内存长度为4的内存空间
    //他们的地址也是连续的
    
    //注意事项:
    //calloc 它使可以帮我们自动的初始化为0
    int *p = (int *)calloc(4, sizeof(int));   //16个字节
    
    if (p!=NULL) {
        
        //申请成功做的事情
        *p = 10;
        *(p+1) = 100;
        *(p+2) = 1000;
        *(p+3) = 10000;   //存放4个整数
        
    }else{
        //内存申请失败
        printf("内存申请失败!
");
        
    }
    
    for(int i=0;i<4 ;i++){
        
        printf("%d	",*(p+i));
        
    }

}
int main(int argc, const char * argv[]) {
    
    int *p = (int *)malloc(4*sizeof(int));   //16个字节
    printf("old %p
",p);
    //realloc 函数可以给已经存在的空间扩充大小
    p = realloc(p, 40*sizeof(int));
    printf("new %p
",p);
    //40个内存空间
    if (p!=NULL) {
        
        //申请成功做的事情
        *p = 10;
        *(p+1) = 100;
        *(p+2) = 1000;
        *(p+3) = 10000;   //存放4个整数
        
        *(p+39)= 1;
        printf("%d
",*(p+39));
        
    }else{
        //内存申请失败
        printf("内存申请失败!
");
    
    }
    
    for(int i=0;i<4 ;i++){
    
        printf("%d	",*(p+i));
    
    }
    
    return 0;
}
//
//  main.c
//  07-野指针和内存泄露
//
//  Created by apple on 15/1/9.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

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

int main(int argc, const char * argv[]) {
    
    int *p1;
    
    int *p = (int *)malloc(4*sizeof(int));   //16个字节

    if (p!=NULL) {
        
        //申请成功做的事情
        *p = 10;
        *(p+1) = 100;
        *(p+2) = 1000;
        *(p+3) = 10000;   //存放4个整数
        
        
    }else{
        //内存申请失败
        printf("内存申请失败!
");
        
    }
    
    
    //应该使用free()函数释放内存空间
    //free(要释放的空间的首地址)
    free(p);
    //free(p)以后,p是一个野指针
    p = NULL;
    
    *p = 100;
    printf("%d
",*p);
    
    return 0;
}
原文地址:https://www.cnblogs.com/aiti/p/4672192.html