By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,402 Members | 1,012 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,402 IT Pros & Developers. It's quick & easy.

delete

P: n/a
hs
hi,

If I have a C struct in C++ like the following:

struct {
int a;
int b;
int c[100];
char d[20];
char *ptr;
}X;
....

I do the following:
..
..
X *ptrX = new X;

ptrX->ptr = new char[200];
..
..
..
delete(ptrX);
Does delete automatically remove memory allocated for ptrX->ptr?
Or does this lead to memory leak and I need to remove heap memory
specifically by doing delete(ptrX->ptr) first ?

Thanks
hs
Jul 22 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
hs wrote:
hi,

If I have a C struct in C++ like the following:

struct {
int a;
int b;
int c[100];
char d[20];
char *ptr;
}X;
...

I do the following:
.
.
X *ptrX = new X;

ptrX->ptr = new char[200];
.
.
.
delete(ptrX);
Does delete automatically remove memory allocated for ptrX->ptr?
Or does this lead to memory leak and I need to remove heap memory
specifically by doing delete(ptrX->ptr) first ?


free what you malloc
delete what you new
delete[] what you new[]

If you "new"ed it, it's your job to delete it :)

Chris
Jul 22 '05 #2

P: n/a
On 9 Aug 2004 10:04:14 -0700, hs <hs******@hotmail.com> wrote:
hi,

If I have a C struct in C++ like the following:

struct {
int a;
int b;
int c[100];
char d[20];
char *ptr;
}X;
...

I do the following:
.
.
X *ptrX = new X;

ptrX->ptr = new char[200];
.
.
.
delete(ptrX);
Does delete automatically remove memory allocated for ptrX->ptr?
Or does this lead to memory leak and I need to remove heap memory
specifically by doing delete(ptrX->ptr) first ?


Neither. You must use

delete[] ptrX->ptr;

because you used new[] you must also use delete[].

john
Jul 22 '05 #3

P: n/a
hs wrote:

hi,

If I have a C struct in C++ like the following:

struct {
int a;
int b;
int c[100];
char d[20];
char *ptr;
}X;

The others answered your question about the pointer. However, what you
have above is not a definition for "struct X" at all. It's an anonyomous
struct of which type you declare one variable, named X.
I think you were going for the old C trick of:

typedef struct {blah blah} X;
That's not necessary in C++, so you should have written it:

struct X {
int a;
int b;
int c[100];
char d[20];
char *ptr;
};


Brian Rodenborn
Jul 22 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.