C言語のお話。
下のソースコードを眺めてください。
#include <stdio.h> #include <stdlib.h> // (中略) unsigned char* screen; int i; // (中略) screen = (unsigned char*) malloc(200); // (1) if(screen = NULL) { // (2) printf("Memory Allocation Error."); // (3) exit(EXIT_FAILURE); // (4) } // (5) for(i = 0; i < 200; i++) { // (6) screen[i] = 0; // (7) ここでクラッシュする } // (8) // (後略)
ここで、問題です。
上のプログラムは間違っています。
みなさんは、このプログラムのどこが間違っているかわかりますか?
クラッシュする場所は上のコメントのように突き止めてありますが、デバッガを持っていないので、それ以外の情報はわかりません。
答えは「続きをよむ」
間違っている行は (2) でした。
(2) の行で screen が NULL になるので、NULL ポインタへの代入はエラー(原因が分かりにくいクラッシュ)になってしまうのです。
Linux だと「Segmentation fault.」とでるところなのですが*1、Windows の場合「このプログラムは不正な処理を行ったので・・・」としか出ず、(もしかしたら「技術情報」のところに出てくるのかもしれないが、)何度修正してもうまくいかず、間違った行(2) を見つけるのに 2時間かかってしまったという始末にいたってしまったのだ。
ちなみに、NULL は 0 つまり FALSE ですから (3) と (4) はスキップしますよ。
これは誰でもやる間違いだと思うので、みなさんも気をつけてくださいね(ぁ
↓は常識的な話。