2020/02/14

覚え書き

多分今まで出ていたアプリケーションエラー全ての根源がわかった
オリジナルからあったサブマリンバグ

オリジナル当初からノード破棄したときのイベントで
・ノードごとに持っていたデータを破棄して(このデータに対してはちゃんとFreeAndNilっていう破棄したあと「nil(ヌル)」を代入してる)
・ノードのタイトルに「」を代入
・ノード移動履歴から削除
という三つの処理をしてたんだけどノード自体に「nil(ヌル)」を入れていなかった

オリジナルもおいらもノードを参照するときは必ず
Assigned 関数というのを使ってそのノードがちゃんと使えるのか確認してるんだけど
その関数は「変数または手続き型変数が nil (値が割り当てられていない) かをテストします」というもので
オリジナルではあんまり込み入ったことをしていなかったから表面化していなかっただけ
ただ一つだけこれが原因だろうなというのが UniCode ファイルを読み込んで
---------------------------
警告
---------------------------
xx.nnaをnanaファイルとして読み込めませんでした。
テキストファイルとして読み込んでみますか?
---------------------------
はい(Y)   いいえ(N) 
---------------------------

いいえを選ぶと Access violation になってタスクキルしか出来なくなる



オリジナルソース
//----------------------------------------
// ノード破棄
//----------------------------------------


procedure TTreeForm.TreeViewFreeNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode);
begin
  FreeAndNil(NodeData(Node).Strings);
  NodeData(Node).Caption := '';
  MainForm.TreeViewFreeNode(Sender);
//↓に一行入れるだけで多い日も安心
  Node:=nil;
end;

0 件のコメント: