data)を外部からfreeを使って解放しようとしたら、いつも例外を起こします。このクラス自身にはrelease()メソッドがあって、おそらくこれが本来dataを解放してくれる仕組みですが、でも、C++にはクラスの外部からメンバーpointerが指しているメモリを解放できないようにする(Eg,例外が起きる)仕組みがあるのでしょうか。ご教授お願い致します。確かに、状況がイメージし難いところはありますね。外部から開放という事は、そのポインタのアクセス制限がどの様に宣言されているのかにも依る部分はある気がします。C++に関しては、newで確保したメモリをfreeで開放しようとするのもNGと思われます。その他、そもそも既に開放されているアドレスにfreeを掛けようとしている可能性もあるかもしれません。最後に、これはあまり言いたくはないのではありますが、メモリ関連に関しては、コンパイラのバグで正常に開放できなくなるケースも、稀にですが確認されてはいます。(その場合、コンパイラを変えるか、コードの書き方をちょっと変えるだけで動いたりする場合もあります。data)を外部からfreeを使って解放しようとしたら、いつも例外を起こします。C/C++のライブラリは自分がどこにメモリを割り当てたかを知っていることができます。通知してもおかしな振る舞いではありません。このクラス自身にはrelease()メソッドがあって、おそらくこれが本来dataを解放してくれる仕組みですが、でも、C++にはクラスの外部からメンバーpointerが指しているメモリを解放できないようにする(Eg,例外が起きる)仕組みがあるのでしょうか。少なくとも標準C++にそのような機構はありません。そもそも,最初に書いてある例外は誰が出した例外ですか。Matクラスでではなく,free関数が送出した例外ではないでしょうか。2年前YuO様とその他の方々、ありがとうございます。YuO様が書かれました:==========少なくとも標準C++にそのような機構はありません。そもそも,最初に書いてある例外は誰が出した例外ですか。Matクラスでではなく,free関数が送出した例外ではないでしょうか。==========非常に建設的なご意見有難うございます。説明させていただきます。dataが定義されてあります。instanceを生成する時にOpencvのほうより自動的にメモリ空間を確保されます。三つの解放方法で同じ実行例外が発生してしまいました。例外発生メッセージ「XXX.exeによってブレークポイントが発生しました。#endif}============================free(...)の場合は実行エラーメッセージ同じですが、上記関数に飛びません。あらゆるアイディア、ご教授に感謝します。}[/code]Mat自身にはrelease()というメソッドがあり、これで恐らくdetaが指しているメモリを解放してくれるだろうと思います。わけで,その管理対象たる領域を勝手にfreeだのdelete[]だのしてしまえば,Matが正規の手続きの中でその領域を解放しようとした際に2重解放になってしまい,そこで例外が出るということでしょう.(そんなメンバが何でpublicなんだよ......とは思いますが)>Mat自身にはrelease()というメソッドがあり、これで恐らくdetaが指しているメモリを解放してくれるだろうと思います。貴重なご意見ほんとうにありがとうございます。勝手にいじたら、不整合が生じます。当初、dataを解放する目的として新規Matを生成せず、他の関数からもらったデータpointerで更新したかったんですが、無理ですね。(そのために前の領域を解放しねければメモリリークになってしまうので)dataにデータをcopyするのは遅いし、どうすれば良いのでしょうか。クラスには使い方が2種類あります。クラス内部でバッファの確保・開放をすべて管理するタイプ。クラスではなく外部で(プログラマーが自分で)管理するタイプです。さんがやりたいことは後者だと思います。以下のように使います。pData);サイズやチャンネル数を指定する方法が幾つかバリエーションがありますので、詳しくはリファレンスマニュアルを参照してください。メンバは、計算処理の高速化のために読み書きしたり、外部のライブラリに渡したりするために公開されているものです。勝手に開放したり、外部からアドレスを変更したりしてはいけません。2つくらいで、余計なことを考えなければ全然複雑なクラスではありません。後は基本的にメンバ関数を通して操作します。様ご指摘の方法でやって見たらOKでした。助かりました!再度皆様にお礼を申し上げます。ミクプラは自由にリンクできます。