Re: What instead of new/delete?

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



One of your newly allocaled arrays got overflown. Your Convertto_mbcs and
Convertto_widechar functions are flawed - they should know size of your
output buffers. Make sure you don't override past the memory.

<ujjwaltrivedi@xxxxxxxxx> wrote in message
news:1173704153.356595.236080@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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 );

}



.



Relevant Pages

  • What instead of new/delete?
    ... Can I use any method to allocate /deallocate memory other than new/ ... Following is the code snippet from my application and now i dont wanna ... EXEC SQL BEGIN DECLARE SECTION; ...
    (microsoft.public.vc.mfc)
  • Re: What instead of new/delete?
    ... Following is the code snippet from my application and now i dont wanna ... EXEC SQL BEGIN DECLARE SECTION; ... char *hv_creatorName; ...
    (microsoft.public.vc.mfc)
  • Calling stored procedure in PRO C
    ... parameter c after the execution. ... EXEC SQL BEGIN DECLARE SECTION; ... char *a; ...
    (comp.databases.oracle.tools)
  • Segmentation Fault at fwrite... Help
    ... EXEC SQL BEGIN DECLARE SECTION; ... struct a_data ... char cn; ...
    (comp.lang.c)
  • Re: Can I use ESQL/C datetime type to define non-host variables / parameters (oops)
    ... Do I need to put the parameters with esql/c datatypes between EXEC SQL BEGIN DECLARE SECTION; and EXEC SQL END DECLARE SECTION;. ... If you want to write datetime as the type name without a typedef, then you have to use the ESQL/C preprocessor to change the datetime into dtime_t for you. ...
    (comp.databases.informix)