• 締切済み

OpenCVをつかってリストの操作をしているのです

OpenCVをつかってリストの操作をしているのですが;;;; リストの消去のところでうまくいきません void shoukyo(KATA *fw){ KATA *ptr=fw; for(;ptr!=NULL;ptr=ptr->next){ if(ptr->dereteflag==TRUE){ if(ptr->next==NULL){ delete(ptr); free(ptr); } else{ KATA *tmp=ptr->next; ptr=ptr->next; ptr->next=tmp->next; delete(tmp); free(tmp); } } } } KATAはある構造体の型です。 やりたい事はリストを走追していきptrのdereteflagがTRUEになっているものを消去したいため、 TRUEになっているものがみつかるとelse文の方では動的に確保した領域tmpをTRUEになっているものの 次のポインタとし、TRUEになった要素のポインタを自分nextへのポインタに変更し、nextにはtmpのnextを 入れるようにして最後にtmpを消去して;;といった感じでプログラムを書いたつもりなのですが a.out(3814,0x7fff7102cca0) malloc: *** error for object 0x12247ee00: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug Abort trap というエラーメッセージが出て実行はできるのですが勝手に終了してしまいます>< どう改善したらよいでしょうか??

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

OpenCVにシーケンスを扱うための構造体/クラスと関数が用意されていますが、それは使わないのですか? 提示されている部分はOpenCVとはまったく関係の無い箇所です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

も 1つついでだけど, ptr の更新もおかしい. どうすればいいのか, 紙の上でじっくり確かめた方がいいと思う.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

delete(ptr); free(ptr); とか delete(tmp); free(tmp); とかしていますが, なぜ delete と free を両方しているのですか? 余談だけど dereteflag というメンバ名もいろんな意味でもうちょっと何とかならんものかと思う. でも, これ全然 OpenCV 出てこないよね....

関連するQ&A