前に書いていたコードをちょっと直してシンプルにしてみたら、メモリアクセス違反が起きて3日悩みました。 先輩に聞いてデバッグしてみたら、あっさり原因が判明。括弧を一組加えて解決しました。 その時のコードがこちら。 解決方法を知ったとき、プログラミングの恐ろしさを垣間見ました気がしました。
※実際のコードとはかなり違います。
/* * bufferをコピーしてある処理を行う。 * flagがtrueならsizeの4倍の大きさの配列を、falseならsizeと同じ大きさの配列を、 * それぞれ作ってある処理を行う。 */ /* 注釈:なお、flagがtrueでsizeが1000の場合、引数にあるbufferのサイズは4000になっている前提。 */ void foo(char[] buffer, int size, bool flag) { /* 新しく作る配列の準備 */ int bufferSize = size * flag ? 4 : 1; char* cBuffer = new char[bufferSize]; /* 一度配列をコピー */ /* TODO : メモリアクセス違反エラーが発生中。 */ for (int i = 0; i < bufferSize; i++) { cBuffer[i] = buffer[i]; } /* 以下、cBufferを使った処理 */ }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
短く書こうと考えるオッチョコチョイは何度も何度も飽きること無く繰り返すうんこコーダ。
コメント投稿には、twitter認証が必要です。
Twitter認証
言語を変えるとそこそこ違うので、カッコは多目にいれるほうですね