[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

delete [] and NULL

John Doe

11/25/2008 8:53:00 AM

Do I need to check for NULL before delete [] p?
9 Answers

dmparadiselm

11/25/2008 9:10:00 AM

0

On 11?25?, ??4?53?, John Doe <mos...@anonymous.org> wrote:
> Do I need to check for NULL before delete [] p?

No need. every time after delete[] p;
p=NULL;

John Doe

11/25/2008 9:12:00 AM

0

dmparadiselm wrote:
> On 11??25è?, ????4ê±53·?, John Doe <mos...@anonymous.org> wrote:
>> Do I need to check for NULL before delete [] p?
>
> No need. every time after delete[] p;
> p=NULL;
Is it written somewhere in some kind of official document(C++ standard ) ?

dmparadiselm

11/25/2008 9:17:00 AM

0

On 11?25?, ??5?12?, John Doe <mos...@anonymous.org> wrote:
> dmparadiselm wrote:
> > On 11?25?, ??4?53?, John Doe <mos...@anonymous.org> wrote:
> >> Do I need to check for NULL before delete [] p?
>
> > No need. every time after delete[] p;
> > p=NULL;
>
> Is it written somewhere in some kind of official document(C++ standard ) ?

It is guaranteed that a NULL pointer deletion is harmless in C++
standard.

Lars Uffmann

11/25/2008 10:06:00 AM

0

dmparadiselm wrote:
> It is guaranteed that a NULL pointer deletion is harmless in C++
> standard.

@OP: However, as dmparadiselm pointed out, you really want to set your
pointers to NULL after deletion, for a
delete p;
might (will) wreak havoc on your program if p is not NULL but there is
no memory reserved anymore.

Best Regards,

Lars

ebony.soft

11/25/2008 11:19:00 AM

0

On Nov 25, 12:12 pm, John Doe <mos...@anonymous.org> wrote:
> dmparadiselm wrote:
> > On 11?25?, ??4?53?, John Doe <mos...@anonymous.org> wrote:
> >> Do I need to check for NULL before delete [] p?
>
> > No need. every time after delete[] p;
> > p=NULL;
>
> Is it written somewhere in some kind of official document(C++ standard ) ?

Hi John

See the C++ Standard draft: Section 5.3.5 Delete, paragraph 2.

Regards
Saeed Amrollahi

Pete Becker

11/25/2008 12:04:00 PM

0

On 2008-11-25 05:05:35 -0500, Lars Uffmann <aral@nurfuerspam.de> said:

> dmparadiselm wrote:
>> It is guaranteed that a NULL pointer deletion is harmless in C++
>> standard.
>
> @OP: However, as dmparadiselm pointed out, you really want to set your
> pointers to NULL after deletion, for a
> delete p;
> might (will) wreak havoc on your program if p is not NULL but there is
> no memory reserved anymore.
>

But setting every deleted pointer to 0 doesn't solve real problems.

void f(void *ptr)
{
delete ptr;
ptr = 0;
}

int main()
{
int *ip = new int;
f(ip);
delete ip; // double delete, despite setting ptr to 0
return 0;
}

--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)

Leandro Melo

11/25/2008 1:18:00 PM

0

On 25 nov, 10:03, Pete Becker <p...@versatilecoding.com> wrote:
> But setting every deleted pointer to 0 doesn't solve real problems.
>
> void f(void *ptr)
> {
> delete ptr;
> ptr = 0;
>
> }
>
> int main()
> {
> int *ip = new int;
> f(ip);
> delete ip;      // double delete, despite setting ptr to 0
> return 0;
>
> }

But that's because what is passed to f() is a copy of the pointer. If
the pointer was passed by reference, the code would be ok. In this
case, I'm assuming (for clarity only) f() receives an int pointer
instead of a void pointer.

void f(int*& ptr)
{
delete ptr;
ptr = 0;
}

int main()
{
int *ip = new int;
f(ip);
delete ip; //Pointer was set to 0 in f. No double delete.
return 0;
}

--
Leandro T. C. Melo

Kai-Uwe Bux

11/25/2008 3:30:00 PM

0

Leandro Melo wrote:

> On 25 nov, 10:03, Pete Becker <p...@versatilecoding.com> wrote:
>> But setting every deleted pointer to 0 doesn't solve real problems.
>>
>> void f(void *ptr)
>> {
>> delete ptr;
>> ptr = 0;
>>
>> }
>>
>> int main()
>> {
>> int *ip = new int;
>> f(ip);
>> delete ip;      // double delete, despite setting ptr to 0
>> return 0;
>>
>> }
>
> But that's because what is passed to f() is a copy of the pointer. If
> the pointer was passed by reference, the code would be ok.
[snip]

The general problem is that multiple pointers to the same object might
exist. If you could guarantee that there is only one pointer to that
object, in general you might just avoid the pointer and put the object on
the stack. If you cannot guarantee that only one pointer to the object
exists, setting the one you delete to NULL buys you nothing (other than
possibly hiding a bug) since you could still have a double deletion with
the others.


Best

Kai-Uwe Bux

Hendrik Schober

11/28/2008 7:38:00 PM

0

Pete Becker wrote:
> On 2008-11-25 05:05:35 -0500, Lars Uffmann <aral@nurfuerspam.de> said:
>
>> dmparadiselm wrote:
>>> It is guaranteed that a NULL pointer deletion is harmless in C++
>>> standard.
>> @OP: However, as dmparadiselm pointed out, you really want to set your
>> pointers to NULL after deletion, for a
>> delete p;
>> might (will) wreak havoc on your program if p is not NULL but there is
>> no memory reserved anymore.
>>
>
> But setting every deleted pointer to 0 doesn't solve real problems.

But it might hide real problems.

> [...]

Schobi