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

Memory-leak when rewriting data (C++)

本文关键字:c++ 泄漏 内存 数据 重写      更新时间:2023-10-16

我的代码(c++)问题导致内存泄漏(我相信)。基本上,我希望它做以下事情:从用户获取数据,直到他写"停止",并从该数据堆。我想我错过了预定内存的移除在某些时候,但我不知道如何解决它。此外,代码似乎在code::块中工作,但在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;

    }

看最后两行在删除w2之前将它设置为NULL

您在下面的循环中更改了指针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循环中。