【发布时间】:2012-10-25 17:13:10
【问题描述】:
当我在这部分代码中释放内存时...我收到一个错误,显示为 :free(): invalid next size (fast)
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;
}
执行 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;
我在 memcpy 之前保留了 free(dataPage),它工作正常,但在 memcpy 之后它不工作..并显示错误....任何人都可以帮助我解决这个问题...
【问题讨论】:
-
请注意,此错误消息是如何不编写错误报告代码的一个很好的示例。正如所写的那样,它只对调试
malloc的内部实现的人有意义,并且充其量会让像OP 这样的程序崩溃的人感到困惑。编写良好的错误消息应该报告类似“致命错误:此应用程序执行了越界内存写入并破坏了内存分配器的内部状态”。
标签: c data-structures struct free memcpy