Roh*_*hit 0 c free struct memcpy data-structures
当我在这部分代码中释放我的记忆时...我收到一个错误显示为:free():无效的下一个大小(快)
int insertRecord(char *record,int recordSize,long dataPageNumber)
{
datapage *dataPage=(datapage *)malloc(sizeof(datapage));
readPage(dataPage,dataPageNumber);
slotentry slot;
//for checking and freeslotnumber storage
int freeSlotNumber=-1;
int negativeFlag=0;
int freeFlag=0;
if(recordSize+sizeof(slotentry)<=dataPage->cfs)
{
slot.slotsize = recordSize;
slot.slotaddress = dataPage->cfsptr;
dataPage->cfs -= (recordSize+sizeof(slotentry));
dataPage->cfsptr += recordSize;
dataPage->slotcount++;
memcpy(&dataPage->data[slot.slotaddress],record,recordSize);
free(dataPage);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
执行free(dataPage)后,我收到上述错误...
typedef struct
{
int pagenumber;
int priority;
long dirPageNo;
long cfs;
int cfsptr;
int slotcount;
char data[1];
} datapage;
typedef struct
{
int slotaddress;
int slotsize;
} slotentry;
Run Code Online (Sandbox Code Playgroud)
我在memcpy之前保持free(dataPage)它工作正常但是在memcpy之后它没有工作..并显示错误....任何人都可以帮助我解决这个问题...
如果是dataPage->data
条目,你可能会因为在边界外写作而得到这个.这个结构条目只是一个字节长,所以除非slot.slotaddress==0
和recordSize==1
,你将写入结束后的任何内存datapage
struct
.这种内存损坏可能是导致free
错误的原因.
要追踪此类错误,我建议您通过valgrind
以下方式运行程序:
valgrind progname args
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可能会收到有关"无效写入"的消息,这些消息会告诉您正在写入数组边界之外.