mm_free()

void mm_free (void *ptr) {
  size_t payloadSize;
  BlockInfo * blockInfo;
  BlockInfo * followingBlock;
  size_t blockSize;

  blockInfo = (BlockInfo *)ptr; //这里有问题malloc得到的指针是header后面一个,你自己都return 了 POINTER_ADD(ptrFreeBlock,WORD_SIZE);,明显应该是 POINTER_ADD(ptrFreeBlock,WORD_SIZE);
  blockSize = SIZE(blockInfo->sizeAndTags);
   //Set Header
  blockInfo->sizeAndTags &= (~TAG_USED);
  //既然是freeblock,你应该设置完header,再补上footer,原来没有footer,是因为被malloc占用了
  insertFreeBlock(blockInfo);

  followingBlock = (BlockInfo *)POINTER_ADD(blockInfo,blockSize);
  followingBlock->sizeAndTags &= (~TAG_PRECEDING_USED);
  //Calculate Payload Size
  payloadSize = POINTER_SUB(SIZE(blockInfo->sizeAndTags),2*WORD_SIZE); //这个就不用了,因为题目里面的payloadSize,就是你的blockSize

  //Set Footer
  (*(size_t *)(POINTER_ADD(blockInfo,payloadSize))=(blockInfo->sizeAndTags));//
  //以上这个应该改为 
  //(*(size_t *)(POINTER_ADD(blockInfo,blockSize - WORD_SIZE))=(blockInfo->sizeAndTags));//
  PUT(FOOTER(blockInfo),blockInfo->sizeAndTags);//上面已经设置footer了,这个就不用了
  // Implement mm_free.  You can change or remove the declaraions
  // above.  They are included as minor hints.
  //
  //最后,设置完insertFreeBlock后,
  //你就直接coalesceFreeBlock(blockInfo),把blockInfo邻近的block合并下就好了.

}

#0 _assert (filename=filename@entry=0x3dc9ca08 "mm_heap/mm_free.c", linenum=linenum@entry=169, msg=msg@entry=0x0, regs=0x3ddbba70 <g_last_regs>, regs@entry=0x0) at misc/assert.c:605 #1 0x1db0fc66 in __assert (filename=filename@entry=0x3dc9ca08 "mm_heap/mm_free.c", linenum=linenum@entry=169, msg=msg@entry=0x0) at assert/lib_assert.c:36 #2 0x1db1a3fa in mm_delayfree (delay=false, mem=0x3de77c20, heap=0x3dde64e0) at mm_heap/mm_free.c:169 #3 mm_delayfree (delay=false, mem=0x3de77c20, heap=0x3dde64e0) at mm_heap/mm_free.c:73 #4 mm_free (heap=0x3dde64e0, mem=0x3de77c20) at mm_heap/mm_free.c:264 #5 0x1db1af5e in free (mem=<optimized out>) at umm_heap/umm_free.c:49 #6 0x1dc7209a in av_free (ptr=<optimized out>) at ffmpeg/libavutil/mem.c:251 #7 0x1dc3aa76 in ffio_rewind_with_probe_data (s=s@entry=0x3de4b100, bufp=bufp@entry=0x3de444d8, buf_size=<optimized out>, buf_size@entry=4096) at ffmpeg/libavformat/aviobuf.c:1213 #8 0x1dc44136 in av_probe_input_buffer2 (pb=0x3de4b100, fmt=fmt@entry=0x3de457a4, filename=filename@entry=0x3de44608 "http://iot102.music.126.net/Yml6PWlvdCZjaGFubmVsPXhpYW9taS12ZWxhJnNjZW5lPWFuZHJ3ZWFy/20250708132631/a7a9136a55a5a24372b85f011aaf6f62/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/34566871844/2a6b/12ff/c278/14fb9b"..., logctx=<error reading variable: Unable to access DWARF register number 80>, logctx@entry=0x3de457a0, offset=0, max_probe_size=524288) at ffmpeg/libavformat/format.c:309 #9 0x1dc3da9c in init_input (options=0x3de4452c, filename=0x3de44608 "http://iot102.music.126.net/Yml6PWlvdCZjaGFubmVsPXhpYW9taS12ZWxhJnNjZW5lPWFuZHJ3ZWFy/20250708132631/a7a9136a55a5a24372b85f011aaf6f62/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/34566871844/2a6b/12ff/c278/14fb9b"..., s=0x3de457a0) at ffmpeg/libavformat/demux.c:178 #10 avformat_open_input (ps=ps@entry=0x3de0a864, filename=filename@entry=0x3de44608 "http://iot102.music.126.net/Yml6PWlvdCZjaGFubmVsPXhpYW9taS12ZWxhJnNjZW5lPWFuZHJ3ZWFy/20250708132631/a7a9136a55a5a24372b85f011aaf6f62/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/34566871844/2a6b/12ff/c278/14fb9b"..., fmt=fmt@entry=0x0, options=options@entry=0x3de44580) at ffmpeg/libavformat/demux.c:291 #11 0x1dc351b6 in movie_async_open_demuxer (ctx=ctx@entry=0x3de0a7a0, filename=filename@entry=0x3de09a48 "http://iot102.music.126.net/Yml6PWlvdCZjaGFubmVsPXhpYW9taS12ZWxhJnNjZW5lPWFuZHJ3ZWFy/20250708132631/a7a9136a55a5a24372b85f011aaf6f62/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/34566871844/2a6b/12ff/c278/14fb9b"...) at ffmpeg/libavfilter/src_movie_async.c:478 #12 0x1dc35930 in movie_async_prepare (filename=<optimized out>, ctx=<optimized out>) at ffmpeg/libavfilter/src_movie_async.c:556 #13 movie_async_proc_cmd (msg=0x3de09a40, ctx=0x3de0a7a0) at ffmpeg/libavfilter/src_movie_async.c:928 #14 movie_async_thread (arg=0x3de0a7a0, arg@entry=<error reading variable: value has been optimized out>) at ffmpeg/libavfilter/src_movie_async.c:990 #15 0x1db11eb8 in pthread_startup (entry=<optimized out>, arg=<optimized out>) at pthread/pthread_create.c:59 --Type <RET> for more, q to quit, c to continue without paging--frame 0 #16 0x1db02778 in pthread_start () at pthread/pthread_create.c:139 #17 0x00000000 in ?? ()
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值