« いせや | トップページ | フロイラインリボルテック綾波レイ »

2007年12月22日 (土)

謎のバグを食らっちゃいました♪

突然、ハングバグやOSエラーが発生していたので
調べてみたら「sprintf」がバグっていた…。

こんな感じでフォーマットと対応する変数を間違えたのが原因。
>char buffer[50];
>int d;
>float f;
>…処理…
>sprintf(buffer,"%d - %f\n",f,d);

勿論、コンパイルエラーも出さないでハングする…
発見するのに手間取ったが取り合えず地道に実行して捕まえた♪

コンパイルエラーが出ないのは、正直困ったちゃんだなぁ~。
「printf」系は、特殊だから仕方がないか…。

しかし、こんな不具合をあまり喰らった事がないのでチョット検証してみた。

#include<stdio.h>
void main(void)
{
    int d;
    float f;
    for(d=0;d<0x7fffffff;d+=1000000,f+=1000000)
    {
        printf("%d - %f\n",f,d);
        printf("%d\n",f);
        printf("%f\n",d);
    }
}
実行していくと…
-1073741824 - 44733606895797633000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
-1073741824
0.000000

何と!ドカント200文字にも膨れ上がる…。
ありえね~!

文字配列を50文字分ぐらいしか取っていないと
思いっきりスタックを破壊してくれてた訳だ…。(汗)

でも、単品だとそんな事は起きないようだ…。

「何故ぇ~!」と思ったが
「『printf』だからさ!」
と誰かが言うに違いない…。(汗)

|

« いせや | トップページ | フロイラインリボルテック綾波レイ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/17439877

この記事へのトラックバック一覧です: 謎のバグを食らっちゃいました♪:

« いせや | トップページ | フロイラインリボルテック綾波レイ »