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

来源:互联网 发布:多个表格数据求和 编辑:程序博客网 时间:2024/05/18 02:22

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

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

代码如下:

/***author:seentime: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;}
原创粉丝点击