がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

実態が切れてないorz

んと…Via、
http://blogs.wankuma.com/hatsune/archive/2008/03/30/130473.aspx
http://blogs.wankuma.com/jitta/archive/2008/03/28/130332.aspx
http://blogs.wankuma.com/episteme/archive/2008/03/29/130391.aspx
http://blogs.wankuma.com/tyappi/archive/0001/01/01/130441.aspx
経由
http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm


なんていうか…「暴走しかねないぞ?」とかなんとか。
具体的には、これ。

    #include 

    int main( void ) {
      int *n;
      *n = 5;   /* ポインタ変数nに値5を代入 */
      printf( "%d\n", *n );  /* ポインタ変数nが持つ値(5)の出力 */
      return 0;
    }

これも

    #include 

    int main( void ) {
      int *n;
      scanf( "%d", n );      /* *nの値をキーボードなどから入力(Enterで終了) */
      printf( "%d\n", *n );  /* nの値を出力 */
      return 0;
    }

scanfやめれとかいう前に。とりあえず「ポインタだけ切って領域切れてないぢゃん!!」。
んとね。ある程度アバウトに解説をすると。

int n;

とした場合。int(おいらのころは2byteだったなぁとかいうのはおいといて)な値が格納出来る領域がどこかに確保されます。ちなみに中身は「不定」ってのがCの定説。
一方で。

int *n;

とした場合。intポインタを格納する領域が確保されます。問題は「そのポインタがどこを指しているのかがわかりません」。
つまり。その「指しているポインタ」次第では、扱い方ちょっと間違えるだけで余裕でコアダンプ吐くと思われますがどんなもんでしょうか?


どんなに最低限考えても

int i;
int *n;

  /* ぽいんたそぉにゅぅ */
  n = &i;

とするか、或いは

int *n;

  /* 領域確保 */
  n = (int *)malloc(sizeof(int));
  /* えらぁしょり */
  if (NULL == n) {
  }

とするのは定石だと思うんですが…どうですかねぇ?*1


んで。
幾人かの方がコメントを書き、筆者の元に届き、修正されたようなのですが…うん先にプログラム直し他方がいいんじゃないかなぁと思うおいちゃんとしては。
久しぶりに見た、ごっつい講座でした orz
…でもまぁ。こゆの見て「我が身を振り返る」のが一番大事なんだろうなぁとか思ってみたりもしますが。


ちゅいき。
…なんか、ぶくま(はてぶ、って言うんでしたっけか?)で、偉いコトけちょんけちょんにいわれてるorz
http://b.hatena.ne.jp/entry/http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm
まぁ…内容的にしゃ〜あんめぇとは思うけどさ。
でも。ふと思った「不慣れな初学者は*2領域確保という感覚が把握しにくい」のかも。
そ〜ゆ〜意味では色々参考になりそうな気がする。

*1:callocが好きとかそゆ意見はとりあえず放置w

*2:書いてる人が初学者かどうかはともかくとして