C语言疑问
程序1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char**point)
{
*point = malloc(5);
ASSERT(*point != NULL);
}
int main()
{
char* p;
fun(&p);
free(p);
return 0;
}
程序2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char* p, point;
p = malloc(5);
ASSERT(p != NULL);
point = p;
free(point);
return 0;
}
问题:
程序1中从被调函数中分配的内存,在主调函数中释放;
程序2中两个指针指向同一内存,释放point而不是p,上述两种做法会不会有什么不妥?怎样修改?恳请指点。
[解决办法]
free之后把point和p都置为NULL。
point是char*变量,我打错了。
两个指针都是指向一块动态内存,free(point)和free(p)不是一样吗?
第二个程序有什么好的替代方法吗?因为有时候的确有这样的逻辑
1、第一种没有问题;
2、第二种不行,point只是一个char变量而已,即便point是char*指针,也会有隐患,因为会导致p成为野指针。
程序1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char**point)
{
*point = malloc(5);
ASSERT(*point != NULL);
}
int main()
{
char* p;
fun(&p);
free(p);
return 0;
}
程序2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char* p, point;
p = malloc(5);
ASSERT(p != NULL);
point = p;
free(point);
return 0;
}
问题:
程序1中从被调函数中分配的内存,在主调函数中释放;
程序2中两个指针指向同一内存,释放point而不是p,上述两种做法会不会有什么不妥?怎样修改?恳请指点。
void fun(char**point)
{
ASSERT(*point != NULL);
}
int main()
{
char* p;
*p = malloc(5); //这样比较好, 与下面的free对应上
fun(&p);
free(p); //
return 0;
}