Which platform are you on?

It could be caused by:

1) Different structure byte-alignment options at compile time (I've
found the default setting works on Windows, on Linux you need a special
-malign switch with gcc at least).  I can look it up if you need it.

2) It doesn't look you are checking the return code from the API call,
checking whether the returned value list has at least 2 items, that
either of the values is of type AR_DATA_TYPE_CHAR, or that the pointer
is not NULL.  You also are copying the data using strcpy, without
checking the length, rather than using strncpy or allocating a buffer of
large enough size.  This could cause corruption (buffer overflow) and
easily explain the error, particularly if szField1 and szField2 are
stack variables.

3) Different run-time library version between your code and the AR
System library (you're calling malloc, it's calling free - could be
mismatched)

If you are on Windows, I put my money on #2 - sounds like stack
corruption.

I would point out that if you used the rtl library much of this would be
done for you, and you wouldn't have to worry about allocating or freeing
any memory, testing for null pointers, checking return codes for error
conditions, etc. ;)

Dan

-----Original Message-----
From: Action Request System discussion list(ARSList)
[mailto:[EMAIL PROTECTED] On Behalf Of Angus Comber
Sent: Monday, July 17, 2006 3:11 PM
To: [email protected]
Subject: Invalid Address specified to RtlFreeHeap( 00870000, 008A1E90 )
on using FreeInternalIdList

Hello

I am doing this with ARGetEntry:

ARInternalIdList idlist;
idlist.numItems = 2; // need two fields
idlist.internalIdList =
(ARInternalId *) malloc(sizeof(ARInternalId) * idlist.numItems);
idlist.internalIdList[0] = fieldID1;   // eg 2 - Submitter
idlist.internalIdList[1] = fieldID2;   // eg 4 - Assigned To
ret=ARGetEntry(&m_ARctrlstruct, szFormName, &entry.entryList[i].entryId,
   &idlist, &fldval, &m_StatusList);

strcpy(szField1, fldval.fieldValueList[0].value.u.charVal);  // copy
field
data
strcpy(szField2, fldval.fieldValueList[1].value.u.charVal);


Then I get Invalid address specified to RtlFreeHeap when I call:
FreeARInternalIdList(&idlist, FALSE);

What am I doing wrong?

Angus

________________________________________________________________________
_______
UNSUBSCRIBE or access ARSlist Archives at http://www.wwrug.org

_______________________________________________________________________________
UNSUBSCRIBE or access ARSlist Archives at http://www.wwrug.org

Reply via email to