返回首页

您好!我与删除poiter有同样的问题。
这是我的代码。

int main()

{

    vector<int*> list;

    int *a;

    for(int i=0;i<10;i++)

    {

        a=new int();

        *a=i;

        list.push_back(a);

    }

    int *value=new int();

    *value=4;

    list.push_back(value);

    cout<<"value : "<<*value<<endl;

    /*Delete pointer less 5*/

    for(int i=0;i<list.size();i++)

    {

        if(*list[i]<5)

        {

            delete list[i];

            list[i]=NULL;

        }

    }

    if(value!=NULL)

        cout<<"value : "<<*value<<endl;

    else

        cout<<"It's NUll"<<endl;

}

我觉得值必须为NULL,但它不是空的,那么,如何它为NULL时,它删除!

回答

评论会员:游客 时间:2012/02/07
查克・奥图尔:{C}这一行:codeprespanclass="code-keyword"if/span(value!=NULL)/pre/code你这样做完全没有变量的命名值。用什么魔法,你认为它会被设置为NULL
尤金Podsypalnikov
评论会员:游客 时间:2012/02/07
//所以如何它为NULL时,它删除请尝试小修改imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif:{体C3}:伟业奥尔金:所有其他的解决方案是有效的,但要注意,当你调用delete分配变量,指针不会自动变成一个NULL值也很重要。指针本身将保持值的变量,即使被释放。如果你想成为NULL指针,你必须要手动设置。{的C4}
Satheesh1546
评论会员:游客 时间:2012/02/07
嗨,这是一个很好的做法,删除它后,分配到一个指针为NULL。确保您正在使用的指针总是以下列方式{C5的}感谢
RaviRanjankr:OK,让我们花一点时间来探讨什么是真正的问题在这里

首先,正如其他人指出,这是很好的做法,设置一个指针变量,案值设置为NULL时,一些分配内存"了免费的",用free()或删除适当。
变量在其他语言(如C#)将被更恰当地称为"调查员",但它是在C / C"指针"变量。
然而,正如其他人指出,你真的创造了一个"指针"的第二个副本,当您添加价值的载体,所以,现在你有两个变量,指向相同的内存位置。有没有在这个星球上的魔力,奔波,并期待在所有的变量,并将它们设置为NULL,如果他们指出,一些被"释放"的内存块。你必须自己做。

现在你,其实,遵循这一好的做法,当您使用[我]元素的名单上删除,并立即设置为NULL指针。所以,你是在正确的轨道上。

这带来了"所有权"的问题。通常情况下,有多个相同分配的内存块的指针是一个坏主意。哦,我可以看到的时候,这是非常有用的,但它在这种用法混淆。一旦你增加价值载体的价值,"放弃所有权",分配的内存的载体。你认识到一个事实,即因为你正在做实际的"释放",通过列表,它通过引用该内存

什么是另一种很好的做法,也为NULL指针,当你产生另一个变量/地方"所有权"。在这种情况下,如果你真的不想一个挥之不去的指针值在离开内存,你应该将它设置为NULL后,将它添加到载体。换句话说,一旦你把它添加到向量,价值不再"拥有"会发生什么情况,内存,并在这一点上,以避免未来的问题,你应该设置的内容为NULL。{5233}
这种"所有权"证明很好地使用一个指针,在一个循环内拨出10种不同的内存块,你在你的代码的早期部分。显然,每次通过覆盖循环(有些人会说:"撞")与未来分配,但幸运的是你,你创建的指针的另一个副本,由放置在载体:查克・奥图尔
评论会员:游客 时间:2012/02/07
这正是你应该期望很简单:您要删除的对象,不修改它的指针,这个指针本身是一个不同的对象,你不以任何方式修改。删除一个对象只是通知堆系统,不再需要的对象,因此它的内存可用于以后需要时由其他一些分配。为了使这更清楚,考虑你实例化一个对象,并指定新的价值,它的指针:{C7-}你收到了吗?mdash;水杨酸
SAKryukov
评论会员:游客 时间:2012/02/07
问题很简单:{C8的}使副本的指针,因此,它不更新在for循环。解决方案(简单易用):codeprelang="cs"spanclass="code-keyword"int/span*value=newspanclass="code-keyword"int/span();*value=4;list.push_back(value);spanclass="code-comment"///spanspanclass="code-comment"Getapointertotheiteminthevector/spanint**pvalue=&(list[spanclass="code-digit"10/span]);.........spanclass="code-keyword"if/span(*pvalue!=NULL)/pre/code请记住,当你在一个向量指针到一个项目,你不应该添加更多的项目,因为再分配,除非你调用储备(预留空间)
ErnestoNet
评论会员:漂亮的 时间:2012/02/07