オンライン サイトから提供されたコードのいくつかをいじっていたときに、予想もしていなかった奇妙な不具合に遭遇しました。変数が、手動で割り当てを行わなくても突然値が変更されたのです。
以下のコードは次のとおりです。
int rc = fwrite(conn->db, sizeof(struct Database), 1, conn->file);
printf("rc is equal to %d\n", rc); // should print out 1
if (rc != 1) die("Failed to write Database.");
rc = fflush(conn->file);
printf("rc is equal to %d\n", rc); // should print out 0
if (rc == -1); die("Cannot flush database"); // error handling
// error comes up because rc suddenly changes to -1
それがどのように起こるかはわかりませんが、C で変数が予期しないときに突然変更される理由を知りたいです。
コード ソース: http://c.learncodethehardway.org/book/learn-c-the-hard-waych18.html (Database_write の下のヒープ スタックとメモリ)
ちなみにMac osx 10.6 Snow LeopardのTerminalでvimを使っています。