コンパイルした時に、警告出ていませんか?
もし出ていたとして大量に出ている場合、その中に埋もれている重要な警告を見過ごす可能性があります。
ひとつの危険な関数を説明します。
(短めの記事です)[0回]
// 危険な関数
int* sum(int a,int b)
{
int k=a+b;
return &k;
}
関数内でローカル変数kを作成し、そのアドレスをリターンしています。
int kはsum関数が呼び終えると消滅しますが、
そのkのアドレスをリターンすると、
消滅した領域を指しているポインタをリターンしている事になり変な値が入っている可能性があります。
コンパイラは関数内で作った
ローカル変数のアドレスをリターンしようとした時に警告を発してくれます。
この重要な警告がfloatからintなどの警告に埋もれてしまう可能性があります。
なので、キャストなどを利用して警告は常に0にすべきです。
fscan_s
fopen_s
などの関数は
#pragma warning(disable:4996)
とヘッダに書くことで4996の警告を表示しないなどもできます。
これをfloat→intで出る警告を表示しないなどはしないほうがいいです。
冬休みがもう少しで始まります。
風邪など引かないように冬休み楽しみましょう。
byリーダ和田
PR
COMMENT