初日 最新 目次 MAIL HOME


*-- To Tell The Truth --*
Cruz
MAIL
HOME

My追加

2001年06月27日(水)
空は海よりも青く・・・

梅雨はどこへいったのか。
毎日晴れすぎ&暑すぎ。
溶けるのは時間の問題。

一昨日、発見したバグはなんとかクリア。
これが本当になんとか。
いろいろ試行錯誤した挙句できたのでOKとしたまで。
実は、なぜこれでいいのか自分でもわからない箇所がいくつか・・・。

その1つは、strcpy(p, dataline);がいっぱい
やってることは、固定長のデータをオフセットごとに項目バラして変数に格納するだけ。
固定長データはconstで持ってきているので、
char *p = new char [strlen(dataline)];
と定義したpに代入してからバラしにかかっているのだが、
1項目の代入を済ませた後、再度strcpy(p, dataline);してやらないと、
pに入っている固定長データがぶち切れていて先(これから取得する項目分)のデータがない。
それも、途中項目まではデータが存在するので必ず1項目ずつに・・・というわけではないのだ。
要はデータが桁落ちしているように見える。
一か八かで、1項目処理するごとにstrcpy・・・をしたら、ちゃんとできた。
うーん、こんなことでいいのだろうか?

もう1つはdelete [] p;
先ほどの話の中で出てきたとおり、pをnewでメモリ割り当てを行っている。
だから、使い終わったらdeleteで開放じゃん・・・と思ったが、
これをすると実行でコケる。
これも一か八かで、え〜い!エラーになるなら取ってしまえ〜!!とやったら、すんなり動いた。
本にだってnewしたらdeleteで開放って書いてあるじゃん。
この例外はなに??

以上、疑問が残るバグ解決でした。