|
You have always to do your cleanup stuff!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
Thanks CPallini!
I think you mean we have to delete A, right?
regards,
George
|
|
|
|
|
Yes.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
Thanks for your confirmation, CPallini!
regards,
George
|
|
|
|
|
But I suggest he should do something like this :
<br />
if(pMyStuff!=NULL)<br />
{<br />
delete pMyStuff;<br />
}<br />
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
And you are right!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
Hello George, nice to see you again. But this time I've got a question for you. Straight to you. Why do are you acting 'quick'-judgemental before someone could actually reply you fully?
See here[^]
And I've seen many times , anybody who replies to your thread gets a 3 vote. Immediately. Is it a token of acknowledgment to say that you've read the message? . I'm really not hurt by that but I'm finding it funny! Why do you do that?
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
In a case like this you should initialize both a and b to 0 before the try clause. You cannot delete a or b at this stage, I assume you will need to use them later, or what was the purpose of allocating them?
int* a = NULL;
int* b = NULL;
try {
a = new int [N];
b = new int [M];
} catch (bad_alloc)
{
// Tell the user if a or b failed...
}
// Do some stuff on a or b
// Now delete if they are allocated
if(a)
delete a[];
if (b)
delete b[];
Thanks!
|
|
|
|
|
Thanks pierre_ribery,
I want to confirm with you that your point is we need to delete a or b if they are successful allocated, even if bad_alloc happens (may be caused by other statements), right?
regards,
George
|
|
|
|
|
Yes that was exactly my point!
If you have allocated memory, then you have to delete it. Therefore it is vital to initialize your pointers to 0 before using them.
Cheers,
Pierre
|
|
|
|
|
Thanks for your advice, Pierre!
regards,
George
|
|
|
|
|
Why you didnt use like this code
try
{
int * a= new int[N];
int * b= new int[M];
}
catch (bad_alloc&)
{
cout <<"Error allocating memory!";
}
|
|
|
|
|
huh Hamid!
it's simply because he should have put it like:
int* a;
int* b;
try
{
a= new int[N];
b= new int[M];
}
catch (bad_alloc&)
{
cout <<"Error allocating memory!";
}
wake up!
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Yeah it was a quick sample.
|
|
|
|
|
Not like that, see my earlier post.
Always initialize pointers!! In this case set them to NULL(0).
int* a = NULL;
int* b = NULL;
|
|
|
|
|
Who said I didn't do it? I'm a c++ programmer.
class myclass
{
int* a;
int* b;
myclass()
{
a= NULL;
b= NULL;
}
}
OK,. what country just started work for the day ? The ASP.NET forum is flooded with retarded questions. -Christian Graus
Best wishes to Rexx[^]
|
|
|
|
|
Your code said it.
Anyway, I think it is pretty important to show it in the code as well.
|
|
|
|
|
Hi Hamid,
I am confused. My question is about whether we need to delete a or b if bad_alloc happens, does your reply has anything related to my question?
regards,
George
|
|
|
|
|
My reply was for check does it with success or no (and my suggestion is when you want to allocate or convert use of try/catch block) and when you got error means that it doesnt allocate any thing to variable.
|
|
|
|
|
Thanks Hamid,
I have developed a couple of samples, which specific case do you think I need to check?
regards,
George
|
|
|
|
|
If you check each block of your program(for exmaple is hwnd valid,etc) you can almost(not always) sure that you didnt get an exception when you run your program
|
|
|
|
|
Hi Hamid,
How could I check manually which block is exception safe or not? There are too many runtime errors, like out of memory or input invalid values to new which will cause bad_alloc.
regards,
George
|
|
|
|
|
Well its simple you know some actions will be problem and you can anticipate them a short list like:
(1) When you want to read a file or write a file:1-does file exist 2-does this file open with other programs 3- can you write to a file on the cd or no,does file on the floppy drive and does it write-protected or no
(2) Database do you have access to database
(3) when you need to a handle to a window does return value valid or its null
(4) Picture does file a image file or no what was return value
(5) when you want to read of internet do you have any connection to internet
(6) do you have a valid pointer or its null
(7) Dynamic memory,does it valid
(8)....
------------------------------
After all of them you must free memory.
|
|
|
|
|
Thanks Hamid,
Comprehensive samples.
regards,
George
|
|
|
|
|
I glad I could help to you.
|
|
|
|