首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关内存释放的疑问解决办法

2012-03-22 
有关内存释放的疑问有一函数,返回值为unsignedchar*Func(void){unsingedchar*AAmalloc(10)....returnA}

有关内存释放的疑问
有一函数,返回值为
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申请的那段空间
}

热点排行