有关内存释放的疑问
有一函数,返回值为
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10)
....
return A;
}
main()
{
unsigned char *B
B=malloc(10);
B=Func();
free(B);
}
当释放B时,是不是同时也释放了A,如果没有,怎样释放A.急需各位指点.
[解决办法]
main()
{
unsigned char *B
B=malloc(10); //B申请了空间
B=Func(); //B改变指向
free(B); //释放了A, 但没有释放B
}
[解决办法]
这里解释一下,LZ的程序实际上是有问题的。
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10)
....
return A;
}
main()
{
unsigned char *B
B=malloc(10); //这里错了,根本就不应该有这一句。
B=Func();
free(B);
}
上面几位说的对,但是没解释明白。LZ就是想让B指向字符串A,但A已经在函数中申请空间了,在主函数中B就不用再申请空间了。LZ 这句:B=malloc(10);申请了内存空间, B=Func();是把B的指向改为了A所指的那段内存空间,而主函数中B申请的内存空间这时候由于没有了变量指向就泄漏了。free(B);是指把B指向的内存空间释放掉,这时候释放掉的就是函数中A申请的空间。最后程序结束了,B申请的空间根本就没有用到,而且由于后来B指向了A的空间,所以B申请的空间
也没有被释放。
正确的程序应该是:
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10);
....
return A;
}
main()
{
unsigned char *B;
B=Func(); //B指向A申请的空间
free(B); //释放了A申请的那段空间
}