在此代码中:

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.pX.p都是无效的指针。

10-08 11:50