近期工作期间,曾经尝试把释放空间写入函数中,然后再调用这个函数,但是发现如果需要将指针置为空值,还需要关注函数的参数类型。
具体实验如下,
/*
* testpt.c
*
* Created on: 2017年12月20日
* Author: lana2017
*/
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
#include "string.h"
#define LANA_DEBUG
void ClearPt(char *cpt) {
free(cpt);
cpt = NULL;
}
void ClearPtNew(char **cpt) {
free(*cpt);
*cpt = NULL;
}
void SetCharArray(char *start, int len) {
int i = 0;
for( ; i<len ; i++) {
start[i] = i;
}
}
void PrintCharArray(char *label, char *start, int len) {
int i = 0;
printf("\nPrintCharArray -- %s\n",label);
if(start==NULL) {
printf("\nWARNING! Pointer is NULL!\n");
return;
}
for( ; i<len ; i++) {
printf("array[%d] = %d\n",i,start[i]);
}
}
int main(int argc, char *argv[]) {
char *test = (char*)malloc(20*sizeof(char));
SetCharArray(test,20);
PrintCharArray("BEFORE CLEAR",test, 20);
#ifndef LANA_DEBUG
ClearPt(test);
PrintCharArray("AFTER CLEARPT",test, 20);
#else
ClearPtNew(&test);
PrintCharArray("AFTER CLEARPTNEW",test, 20);
#endif
return 0;
}
请注意,如果按照ClearPt来释放空间,最终从打印结果来看,test指针仍然不是空值,仍然可以访问原有的那段地址;相反的,如果调用ClearPtNew,其形参是指针的指针,结果表明,test被置空,达到目的。
(码字不易,转载请注明出处)