C语言系列之指针类型内存分配模板

该样例实现了各种类型的指针的内存分配以及 各种类型的指针释放

值得一提的是free操作之后就释放了指针指向的那块内存,则那块内存很可能就被人修改了,所以释放的时机一定要把握准。

代码如下:

/***
author:seen
time:2017-10-12
***/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
using namespace std;

char **getData(int sz,char **res){
    char **p = (char **) malloc((sz)*sizeof(char *));     //存指针变量的内存
 //   char **p;
    for(int i=0;i<sz;i++){
        p[i] = (char *) malloc(sizeof(char)*20);         //存指针变量指向的内容的内存
        int temp = rand()%8;         //生成8个随机数
        p[i] = res[temp];
    }
 //   free(p);
    return p;      //p是指向指针数组的指针
}

int *getIntData(int sz){
    int *p = (int *)malloc(sz*sizeof(int));
    for(int i=0;i<sz;i++){
       // p[i] = (int)malloc(sizeof(int));
        p[i] = rand()%8000;
        //cout<<i<<" data is " <<p[i]<<endl;
    }
    return p;
}

int **getIntMetrixData(int length,int width){
   // int **p = (int **)malloc(length*sizeof(int)*width);
    int **p = (int **)malloc(length*sizeof(int *));   //内存里面存指针变量,length表示指针个数   sizeof(int *)表示int *型变量的内存长度
    for(int i=0;i<length;i++){
        p[i] = (int *)malloc(sizeof(int)*width);      //内存里面存指针变量指向的变量
        for(int j=0;j<width;j++){
          //  p[i][j] = (int)malloc(sizeof(int)
            p[i][j] = rand()%8000;
           // cout<<i<<" data is " <<p[i][j]<<endl;
          // free(p[i][j]);
        }
        //cout<<i<<" data is " <<p[i]<<endl;
    }
    return p;
}

char **test(){
    char **p = (char **)malloc(1*sizeof(char *));     //为指向指针的指针分配内存
    char A = '3';
    char *add = &A;
    //p[0] = (char *)malloc(sizeof(char));
  //  p[1] = (char *)malloc(sizeof(char));          //为指针分配内存
    *p = (char *)malloc(sizeof(char));
    p = &add;
    cout<<"A的地址为:"<<&A<<endl;
    cout<<"add的地址为"<<&add<<endl;
    cout<<"p的地址为:"<<&p<<endl;
    return p;
}

int main()
{
    srand(time(NULL));
    char **data = test();
    cout<<data<<endl;
    #if 0
    int *data= getIntData(1000);
    for(int i=0;i<1000;i++){
        cout<<i<<" "<<data[i]<<endl;
    }
    #endif
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值