该样例实现了各种类型的指针的内存分配以及 各种类型的指针释放
值得一提的是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;
}