微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

引用变量时,C ++删除指针

如何解决引用变量时,C ++删除指针

我不太了解在C ++中使用指针。我的示例代码和问题如下:

int main()
{
    int *ptr1,*ptr2;
    int val1,val2;
    ptr1 = new int;
    val1 = 45;
    ptr1 = &val1;
    ptr2 = ptr1;
    cout << *ptr2;
    delete ptr1; //Crashed
}

之所以出现运行时错误,是因为我尝试删除val1的地址。那么我应该怎么删除ptr1和ptr2?

解决方法

您只能将从delete获得的东西传递给new。由于您将new修改为包含ptr1,所以您没有保存从&val1获得的值。因此,您无法delete,因此您的代码有内存泄漏。您可以这样修复它:

int main()
{
    int *ptr1,*ptr2,*ptr3;
    int val1,val2;
    ptr1 = new int;
    ptr3 = ptr1; // save the value we got from new so we can delete it later
    val1 = 45;
    ptr1 = &val1; // ptr1 no longer contains the value we got from new
    ptr2 = ptr1; // ptr2 and ptr1 both contain &val1 now
    cout << *ptr2;
    delete ptr3; // pass the value we got from new to delete
}
,

因为val1不在堆内存中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。