|
Assuming you have no calls to calloc and malloc, ...
http://stackoverflow.com/questions/3509214/overloading-new-and-delete-in-c
An exception could be the source of the problem since class destructors are not called if an exception is encountered and not handled.
|
|
|
|
|
I'm partial to GlowCode[^]. If you have a few hundred dollars to invest, I'd recommend it.
L u n a t i c F r i n g e
|
|
|
|
|
Thanks for all your reply.
Happy new year.
|
|
|
|
|
Generally I prefer UMDH. Its free from microsoft and works great.
We can customize memory leak detections to some UI operations, a DLL.
|
|
|
|
|
How to let the code be more elegant? Just too much delete .
BTW, while not to deal the exception in side the function, try catch finally can't be used.
void f()
{
char * buf = new char[128];
...
if (...)
{
delete []buf;
throw runtime_error("...");
}
...
if (...)
{
delete []buf;
throw runtime_error("...");
}
}
=====================
I think what I need is something like constructor and destructor, but for a function.
By overriding operator() of a class may solve some problem, but the function it hard to be re-entrantable, and other misc problems.
Most of the cases the function should be short, so this couldn't be a problem, but in some rare case, it has to deal a lot of data,
and the function looks very long.
modified on Friday, December 24, 2010 3:38 AM
|
|
|
|
|
The try-catch block is the most elegant solution, why cannot you use it?
Alternatives are the C -like goto and the if chain you depicted.
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I think exception is rarely happened, I want to catch it in the more outside fucntion, like main .
|
|
|
|
|
If you want to catch it in the main block, then why don't you just throw it?
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.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
How about this?
struct Exception
{
char *text;
void *data;
}
enum ERROR{NONE,...};
void f()
{
char * buf = new char[128];
ERROR e = NONE;
...
if (...) e = ...
if (...) e = ...
if (...) e = ...
if(NONE != e)
{
Exception exp;
exp.text = FindTextForError(e);
exp.data = buf;
throw exp;
}
}
caller()
{
try
{
f()
}
catch(Exception exp)
{
delete exp.data;
}
}
|
|
|
|
|
what abt using smarpointers(ref counting) ?
If u can Dream... U can do it
|
|
|
|
|
Yes, it is fine.
But when I manapulate a dababase instead of memory,
for example, a prepared statement, I need to close it before leave.
Hope it can be common.
|
|
|
|
|
Just define your statement as a class,
that will perform all needed clearances and closing in its destructor.
Then - declare an instance (not an allocation by new) of the class object
in the throwing function -
the destructor will be called in any case (for all on-stack-instances)
They sought it with thimbles, they sought it with care;
They pursued it with forks and hope;
They threatened its life with a railway-share;
They charmed it with smiles and soap.
|
|
|
|
|
A class is ok in the case.
But in another case, the life scope of the object of the class
may larger than the try..catch... block, this can
bring problems, just because the scopes are not inconsistent.
However, there seems no proper way which is also efficient.
BTW, is there any language that can provide some thing like
constructor and distructor for a function?
|
|
|
|
|
All of the variables local defined in a function,
will be constructed on the stack at the beginning of the function
and then destructed - at the end of the function (even there was a throwing)
So you could provide a class for a function service, for example:
class CDBStatement;
class CDBStatementService
{
bool m_bOwner;
CDBStatement* m_pcStatement;
public:
CDBStatementService(CDBStatement* pcStatement, bool bOwner)
: m_pcStatement(pcStatement), m_bOwner(bOwner) {};
~CDBStatementService() {
if (m_pcStatement) {
m_pcStatement->Close();
if (m_bOwner) {
delete m_pcStatement;
}
}
}
};
void TestThrowing()
{
CDBStatementService cDBStatementService(new CDBStatement(), true);
}
They sought it with thimbles, they sought it with care;
They pursued it with forks and hope;
They threatened its life with a railway-share;
They charmed it with smiles and soap.
|
|
|
|
|
you said u need to close the database before u leave right ? so leave means , when the scope of that object goes away right ? so it must be possible to implement via const/dest . say for example when ur function first called the const of the object(declared inside the function) executes and when ur function terminates , the dest of the object executes. u can safely put things there right ?
If u can Dream... U can do it
|
|
|
|
|
If you don't want to use delete all over the place, don't manually manage memory. While it's a bit hard to see the context from the pared down code you've posted why not use an automatic array of char or use std::vector<char> ? Then you won't have to worry about clearing up dynamically allocated memory as you won't be using any.
Cheers,
Ash
|
|
|
|
|
But when I manapulate a dababase instead of memory,
for example, a prepared statement, I need to close it before leave.
Hope it can be common.
|
|
|
|
|
I have a dialog with two list controls, where i have drag and drop from one list control to other, i am using COleDropTarget object to do this. But i have to restrict user to drag and drop from explorer.
Note: If i run application with "run as administrator", list control is restricted the drop, but run as invoker list control is accepting files and folders.
How can we avoid drag and drop from explorer with out running as administrator?
Thanks.
----------------------------
KRISHNA KUMAR T M
|
|
|
|
|
Check out things like RevokeDragDrop() , DoDragDrop() , and IDropSource .
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
Hi All,
I have to use a DLL which exporting classes and need to make a wrapper.
I got .DLL and .EXP file.
I have used previously in a with .Lib file.
please suggest me how can i use exported class using .EXP and .DLL without .LIB file.
Thanks
Bankey
|
|
|
|
|
You've already posted this below... But you can create a lib file from a dll file. Your question should be how to create the lib and include your compiler...
|
|
|
|
|
Hi All,
I want to use some data structures library written in C. I have tried to download and use GDSL (generic data structure library - GNU ) but could not able to use that . Can you suggest any available data structure library written in C which I can use OR do you have any idea how to generate config.h file for that gdsl. I am stopped by that config.h file. I googled unsuccessfuly
Thanks in Advance.
|
|
|
|
|
pandit84 wrote: but could not able to use that
Why ? if it's simple C code, you should be able to use that nearly effortlessly.
GDSL is for "gnu-ish" systems where they have the autoconf and configure tools; when wanting to use gnu-ish stuff on windows, it requires a bit of tweaking (bad header files, bad types, ... non standard stuff) ...
I would not do it; unless really forced to use C.
Instead, I would learn C++ and the STL library.
M.
Watched code never compiles.
|
|
|
|
|
|
Hi All,
I have Win32 DLL which exporting Classes only but i dont have any header file.
I have only library file and DLL.
Can any body suggest me that, How can i use this DLL in my Win32 DLL?
I am trying to use by loadlibrary but as i know i can get only function address.
Please syggest me.
Thanks
Bankey
|
|
|
|