nurupo

C言語初心者学習記Part6

初期化を忘れると痛い目を見る

前回から引き続きポインタ変数の学習で詰まった部分を紹介しています。

今回は、前回語らなかった致命的なミス…

初期化をしてなかった…(;ω;)

という点を取り上げようかと思います。

初期化しないと動作が終了してしまうらしい

先ずは、前回挙げたこちらのコードを見てください。


#include <stdio.h>

void hanbetu(int money,int person,int*a,int*b,int*c);
int *a,*b,*c;
/*この*a*b*cにper,balance,leftを渡します*/

int main(void)
{
int money,person;
int per,balance,left;

a=NULL;
b=NULL;
c=NULL;
/*前もってヌルポインターで初期化します*/

/*タイトル*/
printf(“\t================\n\t|割り勘求める君|\n\t================\n”);

/*入力部分*/
printf(“合計金額を入れてネ:”);
scanf(“%d”,&money);
printf(“\n割る人数を入れてネ:”);
scanf(“%d”,&person);
printf(“\n”);

/*処理部分*/

hanbetu(money,person,&per,&balance,&left);

/*出力部分*/
printf(“一人当たり%d円です。\n”,per);
printf(“貴方は%d円得しました。\n”,balance);
if(left==0){
printf(“綺麗に割り勘できました。”);
}else{
printf(“しかし、残念なことに%d円余ってしまいました。\n喧嘩でもして決着をつけてください。”,left);
}
printf(“\n\n”);
return 0;
}

void hanbetu(int money,int person,int*a,int*b,int*c)
{
*a=money/person;
*b=money-*a;
*c=money%person;

return;
}


 

コード上部で前もってa,b,cにNULLを代入しているかと思います。

実は当初、このヌルポインター(俗称ヌルポ)を入れ忘れていました。

これを入れ忘れると、コードが文法上正しく書けていても処理途中で動作が終了してしまいます。

このプログラムの場合は入力が終わると動作が終了してしまいます。

 

なぜ、初期化しないと動作が終了するのか

どうやら、a,b,cの宣言でメモリを確保した時点では「確保しただけ」であり、予期せぬ値が入っている可能性があるそうです。

今回はその予期せぬ値が影響を及ぼし実行した後でエラーが返ってきてしまいました。

コードの文法に間違いは無かったので読み取られ、入力するところまではいけたという事ですね。

そのため、いったんNULLを代入して「何も参照していない」ことにしておかなくてはいけないそうです。

 

まとめ

ポインタ変数を宣言したらヌルポを入れて初期化しておかないと痛い目を見るかも…

殴られるよりも頭が痛いかもしれませんw

私はかなりの時間この原因究明に割きましたw

 

【前→C言語初心者学習記Part5

【次→】

0

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA