1

私のポインター p は関数内にあります。このコードでメモリ リークが発生しますか?

for(k=0;k< 3;k++)
{

    int *p=NULL;
    int val = bBreak[k+1] - bBreak[k];

    p = new int [val+1];
    p = &buff[bBreak[k]];

    for(int i=0;i< val;i++)
        {

            cout<<"\n"<<p[i]<<endl;

        }

    }
4

3 に答える 3

1

はい!メモリを解放することはありません。delete/delete[]で割り当てるメモリのすべての部分を呼び出す必要がありますnew/new[]

于 2012-08-08T08:54:06.973 に答える
0

はい、そうします

p = new int [val+1]; //allocate array on the heap
p = &buff[bBreak[k]]; //new allocated array is leaked because you lost the pointer to it
//and you are not able to call 'delete[]' to free the memory

一般に、オペレーターへのすべての呼び出しは、オペレーターまたはnewオペレーターの呼び出しとペアにする必要があります。deletedelete[]

于 2012-08-08T08:53:31.267 に答える
0

はい。deleteで割り当てるすべてのメモリを使用する必要がありますnew

p = new int [val+1];
p = &buff[bBreak[k]]; // here you lose track of the memory you've just allocated

メモリ管理を手動で行いたくない場合は、std::vector<int>.

于 2012-08-08T09:03:27.063 に答える