Connecting Tech Pros Worldwide Help | Site Map

Exception Handling & Memory Leak

 
LinkBack Thread Tools Search this Thread
  #1  
Old July 22nd, 2005, 04:45 PM
Bikash
Guest
 
Posts: n/a
Default Exception Handling & Memory Leak

Hello,

I am a specific problem in exception handling. The code snippets is
attached below.

void f()
{
char *ptr = new char(20);
throw 2;
}

void main(void)
{
try
{
f();
}
catch(...)
{
}
}

The above function calls shows that a memory has been allocated to
char * pointer. With the throw statment in the subsequent line states
that there will be memory leak in this time of situation. I just
wanted to know is there any method to free the memory allocated in the
catch(...) block.

Regards
Bikash

  #2  
Old July 22nd, 2005, 04:45 PM
rokia
Guest
 
Posts: n/a
Default Re: Exception Handling & Memory Leak

finnaly()
{
}

or use deconstructor .


  #3  
Old July 22nd, 2005, 04:45 PM
John Harrison
Guest
 
Posts: n/a
Default Re: Exception Handling & Memory Leak


"Bikash" <b_srivastava@hotmail.com> wrote in message
news:d24a5b2a.0407212312.66afaa9c@posting.google.c om...[color=blue]
> Hello,
>
> I am a specific problem in exception handling. The code snippets is
> attached below.
>
> void f()
> {
> char *ptr = new char(20);
> throw 2;
> }
>
> void main(void)
> {
> try
> {
> f();
> }
> catch(...)
> {
> }
> }
>
> The above function calls shows that a memory has been allocated to
> char * pointer. With the throw statment in the subsequent line states
> that there will be memory leak in this time of situation. I just
> wanted to know is there any method to free the memory allocated in the
> catch(...) block.
>[/color]

No there isn't.

Don't use raw pointers, put your pointers in classes instead. Classes can
have destructors and so can free the memory of any pointers they hold.

john


  #4  
Old July 22nd, 2005, 04:45 PM
Peter van Merkerk
Guest
 
Posts: n/a
Default Re: Exception Handling & Memory Leak

Bikash wrote:
[color=blue]
> Hello,
>
> I am a specific problem in exception handling. The code snippets is
> attached below.
>
> void f()
> {
> char *ptr = new char(20);
> throw 2;
> }
>
> void main(void)
> {
> try
> {
> f();
> }
> catch(...)
> {
> }
> }
>
> The above function calls shows that a memory has been allocated to
> char * pointer. With the throw statment in the subsequent line states
> that there will be memory leak in this time of situation. I just
> wanted to know is there any method to free the memory allocated in the
> catch(...) block.[/color]

If it is acceptable that the memory is freed when the f() is left via an
exception (i.e. before it enters the catch(...) block) you could use
std::auto_ptr class or a more sophisticated smart pointer like the ones
in the boost library (http://boost.org/). You may also want look at the
RAII idiom, this idiom is essential if you want to write exception safe
code.


--
Peter van Merkerk
peter.van.merkerk(at)dse.nl
  #5  
Old July 22nd, 2005, 04:45 PM
Peter van Merkerk
Guest
 
Posts: n/a
Default Re: Exception Handling & Memory Leak

rokia wrote:
[color=blue]
> finnaly()
> {
> }[/color]


Even though many compilers support it 'finally' is not standard C++.
However the RAII idiom is an excellent alternative for finally.

--
Peter van Merkerk
peter.van.merkerk(at)dse.nl
  #6  
Old July 22nd, 2005, 04:45 PM
Daniel T.
Guest
 
Posts: n/a
Default Re: Exception Handling & Memory Leak

In article <d24a5b2a.0407212312.66afaa9c@posting.google.com >,
b_srivastava@hotmail.com (Bikash) wrote:
[color=blue]
>Hello,
>
>I am a specific problem in exception handling. The code snippets is
>attached below.
>
>void f()
>{
> char *ptr = new char(20);
> throw 2;
>}
>
>void main(void)
>{
> try
> {
> f();
> }
> catch(...)
> {
> }
>}
>
>The above function calls shows that a memory has been allocated to
>char * pointer. With the throw statment in the subsequent line states
>that there will be memory leak in this time of situation. I just
>wanted to know is there any method to free the memory allocated in the
>catch(...) block.[/color]

There would be a memory leak in any case because no part of the code
even makes the attempt to delete the memory allocated... Maybe a more
resonable example?

void function_that_may_throw();

int main() {
try {
char* ptr = new char( 20 );
function_that_may_throw();
delete ptr;
}
catch ( ... ) { }
}

In this, the solution is to use an auto_ptr:

int main() {
try {
auto_ptr<char> ptr( new char( 20 ) );
function_that_may_throw();
}
catch ( ... ) { }
}

Other examples may call for other solutions, but in all casses RAII is
the way to go. Do a google search on "RAII".
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,989 network members.