重写数据时内存泄漏(C ++)

时间:2015-10-25 15:11:39

标签: c++ memory-leaks

我的代码(C ++)问题导致内存泄漏(我相信)。基本上我希望它能做到以下几点:从用户那里获取数据,直到他写完"停止"并从该数据中生成堆。我想我在某些时候错过了预订内存的删除但我不知道如何解决它。此外,代码似乎在code :: blocks中工作,但它在Dev C ++中崩溃。

cout<<"Enter data to heap if u wanna stop write stop."<<endl;

int *w1=new int[1];

int kek=0;

    while(true)

{
    cin>>*(w1);

    if (!cin)
        {                                        /// the "stop"" thingy
            w1=w1-kek;
            cout<<"heap:  "<<endl;
            for (int i=0;i<kek;i++)
                {
                    cout<<" "<<*w1<<" ";
                    w1++;
                }
            break;
        }
int *w2=new int[2+kek];
w1=w1-kek;                                         
        for(int t=0;t<kek+1;t++)          ///rewriting data to new chunks of memory          
            {

                *w2=*w1;
                w2++;
                w1++;
            }
delete[]w1;                               ///releasing old ones ( i think something is wrong here)   
w1=w2;                                        
kek++;
w1=w1-kek-1;                                 
int kekkeeper=kek;
for(int l=log(kek)/log(2);l>0;l--)            /// heapnig things up

        {

            if(*(w1+kekkeeper/2)>*(w1+kekkeeper)) swap (*(w1+kekkeeper/2),*(w1+kekkeeper));
            else break;
            kekkeeper=kekkeeper/2;
        }    
    w1=w1+kek+1;
    w2=NULL;
    delete[]w2;


    }

2 个答案:

答案 0 :(得分:2)

看看最后的拖车线 在删除之前将w2设置为NULL

答案 1 :(得分:0)

您在以下循环中更改了指针w1和w2

for(int t=0;t<kek+1;t++) {
  *w2=*w1;
   w2++;
   w1++;
}

因此您必须在删除之前为每个指针重置此修改。 w1的重置指令可能如下所示

w1=w1-(kek+1);
delete[]w1;

和w2这样的

w2=w2-kek;
delete[]w2; 

最后你必须将w1的分配移动到while循环中。