ポインタ 確保しているメモリ以上に値が入る
Posted: 2012年6月16日(土) 01:08
度々申し訳ありません。
前回のプログラムを作成している途中で、また躓いてしまいました。
ツリー型のテキストエディタを作っていて、それの作業ファイルをアーカイブにしようと思い、
以下のような構造でファイルを書き込んでいこうと考えました。
[ツリーのノードの種類(ルート、親、子など)] \n [ノードのテキスト] \n [ノードの内容のバイト数] \n [ノードの内容(テキストデータ)]\n
※\nは特殊文字(Ex"\n")のことです
※データは、0\nTitle\n3\nAAA\n........のように続きます
ここで、ノードのテキストを取得した時、なぜかデータにひどくノイズが入ります。
ソフトの画像(これの「ノードのタイトル」という文字を保存したい)
↓
余計な文字が入る(取得したバッファをMessageBox関数で表示)
この部分のプログラム
※lstrlen(TreeName) + Len(Ex"\n")をMessageBox関数で表示すると、正当なバイト数が返されています
※wsprintfで最初にやっていましたが、出来なかったので方法を変えました。が、出来ませんでした。
※たまに、Heap block at ○○ modified at ×× past requested size of △と出ます(メモリが足り無い?)
※たまに、Invalid address specified to RtlFreeHeap(○○,☓☓ )と出ます(変なところに書き込まれている?)
こういうことをするのが初めてで、ものすごく長いコードになったため、一部分を抜粋して書かせて頂きました。
同様のコードをコピペして、 ノードの内容のバイト数、[ノードの内容(テキストデータ)の部分も作ったので同じようなエラーになります。
何かお分かりになられた方、いらっしゃいましたらご教授ください。
情報が足りなければ、かなり汚いコードにはなりますが記載させて頂きます。
よろしくお願いいたします。
前回のプログラムを作成している途中で、また躓いてしまいました。
ツリー型のテキストエディタを作っていて、それの作業ファイルをアーカイブにしようと思い、
以下のような構造でファイルを書き込んでいこうと考えました。
[ツリーのノードの種類(ルート、親、子など)] \n [ノードのテキスト] \n [ノードの内容のバイト数] \n [ノードの内容(テキストデータ)]\n
※\nは特殊文字(Ex"\n")のことです
※データは、0\nTitle\n3\nAAA\n........のように続きます
ここで、ノードのテキストを取得した時、なぜかデータにひどくノイズが入ります。
ソフトの画像(これの「ノードのタイトル」という文字を保存したい)
↓
余計な文字が入る(取得したバッファをMessageBox関数で表示)
この部分のプログラム
コード: 全て選択
'ツリー名
Dim itm As TVITEM
Dim TreeName[256] As Byte
itm.mask = TVIF_TEXT
itm.pszText = TreeName
itm.cchTextMax = 256
itm.hItem = hHandle
SendMessage(hTree,TVM_GETITEM,0,VarPtr(itm) As LPARAM) '取得
'書き込むデータを作成
buffer=malloc(lstrlen(TreeName) + Len(Ex"\n"))
lstrcat(buffer,TreeName)
lstrcat(buffer,Ex"\n")
'wsprintf(buffer,Ex"%s\n",TreeName)
'書き込み
If WriteFile(hFile,buffer,lstrlen(TreeName) + lstrlen(Ex"\n"),VarPtr(WrittenByte),ByVal NULL)=FALSE Then
MessageBox(hMainWnd,"ツリー名の書き込みに失敗しました","Error",MB_OK or MB_ICONWARNING)
Exit For
End If
free(buffer)
※wsprintfで最初にやっていましたが、出来なかったので方法を変えました。が、出来ませんでした。
※たまに、Heap block at ○○ modified at ×× past requested size of △と出ます(メモリが足り無い?)
※たまに、Invalid address specified to RtlFreeHeap(○○,☓☓ )と出ます(変なところに書き込まれている?)
こういうことをするのが初めてで、ものすごく長いコードになったため、一部分を抜粋して書かせて頂きました。
同様のコードをコピペして、 ノードの内容のバイト数、[ノードの内容(テキストデータ)の部分も作ったので同じようなエラーになります。
何かお分かりになられた方、いらっしゃいましたらご教授ください。
情報が足りなければ、かなり汚いコードにはなりますが記載させて頂きます。
よろしくお願いいたします。