我不是版主
不过还是谢谢你的鼓励
以下代码 楼主可以看看 希望有所帮助
程序代码:
/* 在主函数中开辟空间 在子函数里改变动态空间
[color=#0000FF]#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define FREE(p) free(p), p = NULL
const char str[] = "0123456789";
void foo(char *ptr) {
realloc(ptr, 10 * sizeof(char));
strncpy(ptr, str, 10);
ptr[9] = 0;
FREE(ptr);
}
int main(void) {
char p = malloc(5 * sizeof(char));
foo(p);
//若是子函数里FREE执行了
//则p在子函数中已经释放了
//由于函数是值传递的 p的值没有改变
//下面语句中 puts被执行 结果是错误的
//想得正确结果 注释掉子函数中的FREE
if(p) puts(p);
FREE(p); //程序结束前 两个FREE之中一个被执行 就不会泄漏
return 0;
}
[/color]*/
//以上做法不推荐
//下面利用指针的指针来传值 改变动态空间大小和值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define FREE(p) free(p), p = NULL
const char str[] = "0123456789";
void foo(char **p2) {
realloc(*p2, 10 * sizeof(char));
strncpy(*p2, str, 10);
(*p2)[9] = 0;
//FREE(*p2); //此行注释 主函数里的puts就能正确执行
}
int main(void) {
char *p1 = malloc(5 * sizeof(char));
foo(&p1);
if(p1) puts(p1);
FREE(p1);
return 0;
}