What instead of new/delete?

U

ujjwaltrivedi

Can I use any method to allocate /deallocate memory other than new/
delete operators? Actually the problem is while using delete operator
in my ".sqc" files the application crashes. It seems the memory
location is locked by DB and so it throws an 'unhandled exception'.
Following is the code snippet from my application and now i dont wanna
touch the basic design.

Regards,
UvT

Code Snippet:
//----------------------------------------------------------------------------
// SQLFetchfun() - Fetch the next record pointing by the cursor.
//-----------------------------------------------------------------------------

long SQLfunFetch(fun *afun)
{
#if 0
EXEC SQL BEGIN DECLARE SECTION;
char hv_fnName[31];
char hv_fnID[16];
char hv_area[11];
short *hv_fnCrType;
char hv_creatorName[21];
char hv_creatorID[11];
EXEC SQL END DECLARE SECTION;
#else
/* char *hv_fnName; //Comments : Here comment the
earlier code & intialize all the
char *hv_fnID; // pointer variables with "new"
declaration.
char *hv_area;
short *hv_fnCrType;
char *hv_creatorName;
char *hv_creatorID;*/

char *hv_fnName = new char[sizeof(afun-
fnName)*sizeof(TCHAR)]; //Comments : use sizeof var name * sizeof
TCHAR
char *hv_fnID = new char[sizeof(afun->fnID)*sizeof(TCHAR)];
char *hv_area = new char[sizeof(afun->area)*sizeof(TCHAR)];
short *hv_fnCrType;
char *hv_creatorName = new char[sizeof(afun-
creatorName)*sizeof(TCHAR)];
char *hv_creatorID = new char[sizeof(afun-
creatorID)*sizeof(TCHAR)];
#endif

EXEC SQL SET SQLCA "gpSqlca";

/* hv_fnName = cfun->fnName; //Comments : Here comment the
earlier code of intialization & use Convertto_mbcs
hv_fnID = cfun->fnID; //
hv_area = cfun->area;
hv_fnCrType = &cfun->fnCrType;
hv_creatorName = cfun->creatorName;
hv_creatorID = cfun->creatorID;*/

Convertto_mbcs(afun->fnName,hv_fnName);
Convertto_mbcs(afun->fnID,hv_fnID);
Convertto_mbcs(afun->area,hv_area);
Convertto_mbcs(afun->creatorName,hv_creatorName);
Convertto_mbcs(afun->creatorID,hv_creatorID);
hv_fnCrType = &afun->fnCrType;


EXEC SQL FETCH RELATIVE 1 funCursor
INTO :hv_fnName,
:hv_fnID,
:hv_area,
:hv_fnCrType,
:hv_creatorName,
:hv_creatorID; //Comments : After the SQL statement is
finished convert the vaules from
// host variable to widechar & fill the unicode
structure


Convertto_widechar(afun->fnName,hv_fnName);
Convertto_widechar(afun->fnID,hv_fnID);
Convertto_widechar(afun->area,hv_area);
Convertto_widechar(afun->creatorName,hv_creatorName);
Convertto_widechar(afun->creatorID,hv_creatorID);

delete hv_fnName; //Comments : Delete the
variables earlier assigned with "new"
delete hv_fnID;
delete hv_area;
delete hv_creatorID;
delete hv_creatorName;

return ( gpSqlca->sqlcode );

}
 
V

Victor Bazarov

Can I use any method to allocate /deallocate memory other than new/
delete operators?

You don't need to. You're using 'delete' to free memory allocated
by 'new[]'. Use

delete[] blah;

instead. And read up on the differences.
Actually the problem is while using delete operator
in my ".sqc" files the application crashes. It seems the memory
location is locked by DB and so it throws an 'unhandled exception'.
Following is the code snippet from my application and now i dont wanna
touch the basic design.
[..]

V
 
F

Francis Glassborow

Victor Bazarov said:
Can I use any method to allocate /deallocate memory other than new/
delete operators?

You don't need to. You're using 'delete' to free memory allocated
by 'new[]'. Use

delete[] blah;

instead. And read up on the differences.


And better still use some suitable library type instead of doing manual
allocation/deallocation of dynamic memory. Either std::vector<> or
std::string.
 
U

Ulrich Eckhardt @ Usenet

Can I use any method to allocate /deallocate memory other than new/
delete operators? Actually the problem is while using delete operator
in my ".sqc" files the application crashes.

Not using delete will not make your program run correctly, I'd say you
messed up in some other place, only that it remains invisible until you
try to invoke delete.
It seems the memory location is locked by DB and so it throws
an 'unhandled exception'.

It throws a C++ exception? That would mean that you make some logic error
and the allocation method is not the problem. However, throwing from a
destructor is a bad idea, so there might be other things wrong, too.

Please clean up your code before posting. In particular remove unused parts
and make sure the code can be compiled.
char *hv_fnName = new char[sizeof(afun->fnName)*sizeof(TCHAR)];

What is this supposed to do? Are you using the chars as raw storage or as a
distinct number of chars? In the former case, computing the number of
required chars is correct, in the latter it should only contain the number
of chars you want. Also pay attention that TCHAR is not a standard type
and that its size and underlying type depend on the context. Ask in a
win32-related group about that.
//Comments : use sizeof var name * sizeof TCHAR

What is this comment telling you? Also, if 'afun->fnName' is a pointer, you
will get the size of a pointer and not the size required for the string.
BTW, when sizeof is applied to an object, you don't have to use brackets.

My suggestion:
1. If you are using strings (i.e. text) use std::string, std::wstring or if
you really are working TCHAR-based std::basic_string<TCHAR>. Forget about
new/delete for managing strings.
EXEC SQL SET SQLCA "gpSqlca";

Nobody without background can interpret this. It is not part of standard
C++. If this is not the problem, you should have removed it during the
cleanup before posting.
Convertto_mbcs(afun->fnName,hv_fnName);

I strongly guess that you messed up between pointer sizes and array sizes.
Use strings, not raw arrays or new/delete.
delete hv_fnName;

If you use the array form of new, you also have to use the array form of
delete. See the C++ FAQ at parashift's.
return ( gpSqlca->sqlcode );

'return' is not a function, no need for brackets.

Uli
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,763
Messages
2,569,562
Members
45,038
Latest member
OrderProperKetocapsules

Latest Threads

Top