DICOM-XA Viewerでのメモリーリーク

何となく体裁が整ったきちんとリアルタイムの動画で動く DICOM-XA Viewerなのですが、そのUI部分は MFC (Microsoft Foundation Class)を用いて作成しています。もちろん重要なロジックは当方が 10年間の歳月をかけてつくりあげたものです。コンパイルして動作させても軽快に動きますが、VisualStudio debug modeでやると、最後に1KBぐらいの memory leakが検出されるのです。
ソースコードを追いながらその原因を探るのですが、分かりません。そもそも MFCを用いているのでどのように原因トレースすべきか判らないのです。それで Google博士に聞きました。Google博士はご機嫌斜めらしく、色々な聞き方をして、ようやくこのページにヒットしました。

ここに書いてあることも、普通は分かりにくいですよね。

#ifdef	__AFX_H__            // MFCのウィンドウを使う場合に限定しています
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#endif
以上のコードを、すべてのソースコード (*.cpp) のヘッダファイルをインクルードしたあとに追加します。

などと書かれてもどこに書けば良いのか分かりませんよね。これについては、簡単に考えて、.cpp filesの #includeの行が無くなったらばその先頭に書き込むのです。自分が作成した全ての .cppファイルに書き込むのです。

そして、再度コンパイルして走らせました。そうしたらば、見事 Memory leakを引き起こしている命令行が分かりました。そこてら、色々考えてついに、RBitStream classに潜んでいたメモリーリークを突き止め、修正しました。

ああ めでたしめでたし

今、MFCから C++ Builderに開発環境を移行しようかと考えているところです。

ガーァンッ

実は明日土曜日から水曜日までタイトなスケジュールでバングラデシュに慢性完全閉塞に対するPCIとTRIの普及のために、行く予定でした 現地の日本国大使館も動いて頂き、大使公邸での食事会も開催されるという それこそ日本国とバングラデシュの今後の友好にも寄与するはずでした
しかし、突然昨日、この予定そのものがキャンセルこととなったのです 急速に高まる現地の情勢不隠のためです
このように僕の外国訪問が現地情勢でキャンセルとなったのは今から15年ぐらい前、パキスタンで開催された国際学会に、日本から僕がリーダーで何人かの先生方を引き連れて訪問する予定の時以来です この時は、現地の情勢不隠に対して、僕の判断で中止しました 先生方にはそれでも行きたい、と言われる方々もおられましたが、僕は止めました これが正解だったのです 数日後軍事政権によるクーデターが起こり、外国人は少なくとも一か月間パキスタン国内から出国できなくなったのです
いかに誰でも喜ばれるような医療支援活動といえども国際情勢とは無関係ではありません その意味でも昨今の中国や韓国との関係は心配です もうこれから50年間はもとのような関係に戻らない、そのように思います

C++ Builder

これまでC++のプログラムを書いてC++の勉強をする時にはほとんどの場合 VisualStudioを使用してきました そして、ときどきMacBook-Proでの OSXで XCodeの上で GCCやLLVMだっけなんだっけか とにかく純正に近いC++を使用してきました
もともとC++のプロの間では MicrosoftのC++ CompilerがC++の標準規格から外れる、という問題点が指摘されているのを知っていましたが、実際問題として Windows上で C++を用いて何らかのプログラムを作成する時には、やはりMicrosoft C++ (VisualStudio)という選択だったのです
以前より Borland社は非常に高機能なC++ Compilerを出していたのですが、現在はEmbarcarderoという会社に吸収されてしまいました そして、C++ BuilderというCompilerを世に出していたのです
その存在は依然から知っていましたが、どうしても踏み込めなかったのです しかし、ついにそのCompilerを昨日入手しました 標準C++によく合致しているそうです これからはこのComplierを用いて DICOM Viewerを作成しようと思っています

夜明けに立ち会う感激

僕が冠動脈造影を始めたのは、1976年です
そして、冠動脈インターベンションを初めて行ったのは1981年です
幸いその時に、日本のPCIの夜明けに立ち会うことができたのです これは僕の人生の中で一つの大きな記念すべきことであり、医者とてし治療の新たな局面に立ち会うことができて幸せでした
もうそんなことはあまり無い、そのように思ってきました
しかし、それから30年間以上経過した今、再び新たな夜明けに立ち会う感激に浸っています
本日湘南鎌倉総合病院に TAVI/TAVR (経カテーテル大動脈弁植え込み術)の施設認定証が送られてきました 今再び新たな治療法の開始に立ち会うことができるのです これは医者として本当に光栄なことです
これから多くの治療困難な患者さんのために、この困難な病気に立ち向かっていくつもりです

お盆も過ぎて

お盆の期間ずっと鎌倉で働いていました
とても忙しく、重症の方々がたくさん来られました 東京近郊の鎌倉では、普段東京の通勤され、少々の症状があっても仕事を優先され、ご自身の体についてケアされていない方々が多いのです そのような方々がまとまった休みを取ることができるお盆の期間に病院にかかられる、そのようなケースがあるのです
大体においてそのような方々は重症です しかし治療する方も治療のし甲斐があるのです とても良くなられてお盆が明ければ何事も無かったかのように仕事に復帰されるのです これって僕の目指す理想の治療体系かも知れません
そんなこと言いながら僕はこの土日もTAVIの必須トレーニングで新宿に缶詰なのです 自分自身の健康についてはあまりケアしていない、というのが実情なのです

ついに動画出力に成功

各コマのDICOM XA画像出力に成功し、動画とすることは目前に迫っていました。動画化することに技術的難点があるとは考えませんでした。実際、MFC single document classを用いて実装し、ファイルからメモリに読み取り、フレームに分割する部分をCDocument classに実装し、一秒間15コマのタイマー割り込みと、画面に書き込む部分をCView classに実装し、エイヤッとコンパイルしたところ、見事に動画として動作しました。動画も軽快であり、画面のチラつきも無く、まだまだコマ数を増やせそうです。いやあ長い旅路でしたが、ようやく DICOM XA出力できるようになりました。
後は、DICOMとしてのタグの処理などを実装します。これは簡単ですが、ややこしい作業です。

やっと解決

DICOM XA Viewerが何とか走るようになりそうです 前日解決できなかった、あるフレームでは絵がビット崩れする現象の原因が特定できたのです
XA dataからBit入力して、Huffman codeを用いて暗号解読していく訳ですが、肝腎のHuffman codeが実はフレーム毎に変化していたのです いや、大体は変化せず、最初のフレームのHuffman codeがそのまま用いられるのですが、時に変化するのです だから、DHTからHuffman codeを解読せねばならないのです
その部分を書き直したところ下記のように先日ビット崩れしていたフレームもきちんと解読することに成功しました
DICOM_test4

DICOM_test5

DICOM_test6
あとはタイマー割り込みを実装して時間と共にフレームを書き換えるだけです
それはかつてブロック崩しを作成した時に実装した経験があるので簡単な筈なのですが・・・
実はすっかり忘れてしまい、今はどうやるやら全く判らなくなっているのです でもまあできるでしょう