c - 错误 :free(): invalid next size (fast)

标签 c data-structures struct free memcpy

<分区>

当我在这部分代码中释放我的内存时......我收到一个错误显示为: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;
}

执行 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 之后它不工作了......并显示错误......任何人都可以帮助我解决这个问题......

最佳答案

如果 dataPage->data 条目,您可能会因为在边界之外写入而得到这个。此结构条目只有一个字节长,因此除非 slot.slotaddress==0recordSize==1,否则您将写入结构结束后的任何内存数据页 结构。这memory corruption可能是导致您的 free 错误的原因。

要追踪此类错误,我建议通过 valgrind 运行您的程序:

valgrind progname args

在这种情况下,您可能会收到有关“无效写入”的消息,告诉您您正在数组边界之外写入。

关于c - 错误 :free(): invalid next size (fast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239369/

相关文章:

java - 如何从捕获的迷宫图像创建图形

c - C 中的反向波兰表示法疑难解答

c - 如果我不知道文件中的内容,我应该如何读取内容并存储由空格分隔的不同部分?

c - 在 C.= 中计算阶乘时得到错误结果

c - 在 c 中扩展图形结构

c - C中 volatile 结构中的指针

c - 关于 struct 数组作为 gcc 和 vc 编译的参数

C 中的 main() 之前不能声明 void 函数

c++ - 是否有任何类似数组的数据结构可以在两侧增长?

algorithm - 如何最大限度地减少在仓库之间移动 cargo 的总距离?