在此代码中:
struct test
{
char *p;
};
struct test glob;
void someFunc(struct test);
int main()
{
struct test X;
X.p=malloc(10);
someFunc(X);
//free(X.p);
}
void someFunc(struct test y)
{
glob.p=y.p;
}
在C++中,我认为这很棘手,因为当
someFunc
结束并且y
消失时超出范围-如果有人具有适当的析构函数,并且这是一类
object-
y.p
指向的内存将在someFunc
结束后释放,因此glob.p
会指向垃圾吧?考虑到上面相同的代码,在C中也是这种情况吗?还是
glob.p
结束后someFunc
指向可用内存? 最佳答案
在C语言中,someFunc()
结束后,y
被销毁,但y.p
指向的不是。您可以随时随地使用分配的内存,直到调用free()
为止-这是动态分配的优点之一(也是缺点之一-功能强大,责任重大。)
在C++中,除非有一个析构函数删除指针,否则将发生同样的事情。在那种情况下,是的,glob.p
和X.p
都是无效的指针。