配列の初期化

vc++でコンパイルすると配列は初期化されずにゴミが入ったままになる。
linuxのgccだと一応全部に0が突っ込まれる?らしい。

typedef int Key;

typedef struct item{
Key key;
}Item;

typedef struct table{
int n;
Item *item;
}*Table;

int hoge;

Item *lookup_item(Table table,Key key){
int mid,left,right;
if(table->n == 0) return 0;
left=0;
right=table->n-1;
while(1) {
mid = (left + right) / 2;
if(table->item[mid].key == key){hoge = mid; return &table->item[mid];}
if(left>=right){hoge = mid; return 0;}
if (table->item[mid].key < key) left = mid + 1;
else right = mid-1;
}
return 0;
}

赤い部分が抜けてて、table->nが0で、keyが0だと見つからないはずの0が見つかっちゃうんだよねー。
これにかなりはめられた。家でできるのに大学のlinuxでやったとたん何かがおかしい。何故だ?くそやろう!って感じで。
でも二日くらい放置して忘れてから見るとあっさり気づくんだよね。


posted by 右京 | c言語
blog comments powered by Disqus
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。