2008-09-01から1ヶ月間の記事一覧

添え字演算子 [] がオーバーロードされているクラスの配列

二次元配列と同じで、添え字の順番を間違えたら大変な事になります。 (かけ算九九の表なら、値は変わらないかもしれませんが。) たとえばSTLのvectorそのものの配列はどうなのか。これで一目瞭然です。 std::vector<int> v[3]; v[1].push_back(99); // 今プッシ</int>…

参照とかヌルポインタとか。

C++

void func( int &hoge) { hoge = 1; } int main() { int *p = 0; func( *p); return 0; } 何の表示も行いませんが、エラーはばっちり出ます(実行時に)。 BCC5.5とVC++2008EEで確認。 「アドレス0x000... でアクセス違反が・・・」と、そんな感じ。そこで、…

よくやってしまうミス2

大好評につき、前回の続編です。 その3 int array[9][9];な二次元配列で掛け算九九の表を作りたいとする。 for( int i = 1; i < 10; i++ ) for( int j = 1; j < 10; i++ ) // i++じゃなくてj++でしょうが。 array[i][j] = i * j; 一部の掛け算がとんでもな…

よくやってしまうミス

大抵はすぐに気づくのですが、これのために何時間も費やしてしまった事があります その1 for( i = 0; 条件1 && 配列の境界チェック; i++ ) { /* array[i]に何かする */ } とやるところを for( i = 0; ○○○ || □□□; i++ ) { ... } とやってしまってオーバーフ…

const char *をchar *に変換?

C++

引数で void func( const char * const src) { ... } となっているような変数に対して関数内でchar *ptr = (char *)src; /* constだよ! constだよ! */なんていうキャストができる。 それを使えば、変更されないと思ってたsrcが関数内で当たり前のように変更…