#include
#include
#define SAFE_MALLOC(n) safe_malloc(n)
#define SAFE_FREE(p)
safe_free((int**)(&(p)))
//将变量指针赋值为空指针
//若变量本身为空,则提示出现野指针
void safe_free(int **p)
{
if(*p)
{
free(*p);
*p = NULL;
printf("这不是野指针!!!,好开心.@ _ @\n\n");
}
else
{
printf("奥,这是野指针出现了呀!\n\n");
}
}
//验证指针是否是空指针
void foo(int *p)
{
if(!p)
{
printf("You passed a null pointer!");
exit(-1);
}
else
{
printf("传入的指针变量不是空的,可以运行!");
}
}
//检查内存分配是否成功
//内存失败后给出提示
void *safe_malloc(int n)
{
void *p = malloc(n);
if(p)
{
return p;
}
else
{
printf("你的内存分配不够,我先撤退了!");
exit(-1);
}
}
//分配变量空间的函数,最终变量空间被释放
void f(void)
{
int *x = (int*)malloc(10*sizeof(int));
x[9] = 100;
printf("\n\n\t%d\n\n",x[9]);
free(x);
}
int main()
{
//分配下一定的内存空间,然后释放
void *p = malloc(7);
free(p);
//分配下特定的变量空间,然后释放
int *n = (int*)malloc(4);
*n = 7;
printf("\n\n\t%d\n\n",*n);
free(n);
//调用分配、释放变量空间的函数
f();
//调用检查是否成功分配变量空间的函数
int *pp = (int*)SAFE_MALLOC(sizeof(int));
*pp = 1000;
printf("\n\n\t%d\n\n",*pp);
//调用检验传入指针参数是否为空指针的函数
int *ppp = (int *)malloc(sizeof(int));
*ppp = 10000;
foo(ppp);
printf("\n\n\t%d\n\n",*ppp);
free(ppp);
//分配的时候是分配下一个int空间
//传入函数中的也应该是int类型指针地址,否则会因为int指针无法转换为void指针而报错
//当然,能够接受任何类型的指针类型的函数是最好的
int *pppp = (int*)malloc(sizeof(int));
*pppp = 100000;
printf("\n\n\t%d\n\n",*pppp);
safe_free(&pppp);
return 0;
}