パスワードを忘れた? アカウント作成
22351 story
プログラミング

ZDNetのポインタ解説記事で勘違い 196

ストーリー by nabeshin

あるAnonymous Coward 曰く、

ZDNetに C/C++のポインタの機能 — 参照渡しのような処理というポインタの解説記事があるのだが、 中身がなかなか香ばしい。コメントにもあるように、記事の間違いを探すということで ポイントを理解させるというネタには使えるのだろうか。

訂正も行われたが、根本的には直っておらず、再レビューとなっているようだ。

現在、本稿には技術的な誤りが存在するため、詳細をレビュー中です。 初めてご覧になる方は、コメント欄もあわせてお読み下さい。 また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。
とのこと。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 騙されました。 (スコア:4, おもしろおかしい)

    by Anonymous Coward on 2008年04月01日 15時01分 (#1323154)
    あまりの出来に、あやうく騙されるところでした。
    4/1の記事としては、最高の出来だと思います。
  • by Super KUMASAN (34209) on 2008年04月01日 15時40分 (#1323189)
    技術的な誤りを修正すれば「メデタシメデタシ」では無い。そもそもの記事の意図が意味不明であることが根本的な問題。こんな細かな議論をする前に、なぜポインタが必要なのかということを述べるべきだと思う。また、絵がないのも良くない。絵を使わずにポインタを理解できるわけがない。ひとことでいうとプロのライターの仕事では無い。
  • by Account-mochi Coward (34881) on 2008年04月01日 15時45分 (#1323194) 日記
    プログラマの面接の時にこの記事を見せて、3分以内に問題を指摘できない奴は採用しないとか。
    --
    署名スパムがウザい?アカウント作って非表示に設定すればスッキリさ。
    • by Tatenon (20311) on 2008年04月01日 16時36分 (#1323259) 日記
      インスタントラーメン作ってるわけじゃないんだから。
      中途採用だと3秒で噴いてくれないと採用できないなぁ。

      まぁ今年の新入社員で制限時間30秒だな。

      # 甘やかしすぎかなぁ。10秒でいいかも。
      親コメント
      • Re:3分? (スコア:2, すばらしい洞察)

        by Account-mochi Coward (34881) on 2008年04月01日 16時54分 (#1323282) 日記
        いや、ちゃんと理解している人だと
        「まさかそんなアホなヘマをやっている筈がない、きっとこれは引っかけ問題だろう」
        と深読みしすぎてかえって見落とす可能性があるので3分。
        --
        署名スパムがウザい?アカウント作って非表示に設定すればスッキリさ。
        親コメント
  • つれたつれた (スコア:3, おもしろおかしい)

    by niratama (2175) on 2008年04月01日 16時00分 (#1323217) ホームページ 日記
    実はCの解説記事を書けるライターを探すための釣り記事……

              ,~~~~~~ 、
    |\     ( 釣れたよ~・・・)
    |  \    `~~~v~~~´
    し   \
    ゙'゙":"''"''':'';;':,':;.:.,.,  ヽ○ノ
              ~~~~~|~~~~~~~ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                     ト>゚++
    • Re:つれたつれた (スコア:1, おもしろおかしい)

      by Anonymous Coward on 2008年04月01日 19時29分 (#1323389)
      エピステーメーという大物が釣れて良かったよね
      親コメント
      • Re:つれたつれた (スコア:2, おもしろおかしい)

        by pharmer (32222) on 2008年04月01日 20時52分 (#1323454)

        エピステーメーという大物が釣れて良かったよね
        確かにC++標準化委員会のメンバに直接間違いを指摘してもらえるってのは、幸せなことだよね。
        記事書いたライターはそのあたり解ってるのかな。

        親コメント
  • by Anonymous Coward on 2008年04月01日 15時15分 (#1323170)
    その昔、この件と同様のポインタ変数の誤った説明が載ったC言語入門書が
    あって、買ってはいけないプログラミング教本の第一位に輝いたとか、
    新入社員プログラマにはこの本で勉強した経験があるかを最初に確認し、
    誤った知識を矯正せよ。
    などと言われたものですが。

    本のタイトルと著者が思い出せない...
  • Null 部門名 Exception (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2008年04月01日 15時24分 (#1323174)
    各方面からの指摘・訂正も行われたが、根本的には直っておらず、(編集者としての資質を)再レビューとなっているようだ。
  • by Teruching (3577) on 2008年04月01日 15時00分 (#1323152) ホームページ
    今日の記事だから、エイプリールフールで「ヌルポ ガッ」ネタかっ! と思ったら、ZDNetでのリリースが3月27日でマジネタだった…
    --
    天琉陳(Teruching)
  • by reo (4042) on 2008年04月01日 15時05分 (#1323158) 日記
    #1322924 [srad.jp]
    --
    Hiroki (REO) Kashiwazaki
  • by yun (448) on 2008年04月01日 15時11分 (#1323167)
    昨今、Cを書けなくてもプログラマなんてやっていけるから、間違い自体が悪いとは言わない。
    でも、自分がまったく理解していない言語の理解していない概念について、適当に聞きかじりと思い込みだけで記事を書くなよ、とは言いたい。
    編集と著者の最低限の誠実さを疑う。
    当該編集部と著者の名前は私の中ではブラックリスト入り確定です。
    • by 127.0.0.1 (33105) on 2008年04月01日 15時34分 (#1323187) 日記
      はたから見たら、確かに適当な聞きかじりと思い込みなんでしょうけども
      当人達は普通に正しいことと思っていて、何がおかしいかすら
      分からなかった(推測ですが)というのがまた怖いですね。

      さて、他の著書や記事では同様の問題はなかったのでしょうか?

      #ターザンの意思なのでID
      親コメント
  • scanf (スコア:1, 興味深い)

    by Anonymous Coward on 2008年04月01日 16時11分 (#1323233)
    元記事のコメントにscanfのバッファオーバフローに付いて言及しているものがあった。
    さすがにこれは偏執狂ではないかと思うのだが・・・・・

    ポインタの概念を教える授業でしっかり時間があれば
    それは言及できるだろうが、このポインタの説明においては冗長だと思う。

    その指摘を書いた人物は教師であると名乗っているが、
    正確さを期そうとして、重要な事を述べる場面で注釈をいくつも付ける授業を行うのだろうか?

    突っ込む側もポイントをしぼって突っ込んでもらいたい。

    # だいたいからポインタの全てが2ページの記事で解説できるわけないじゃないか
    # 概念の入り口の説明という認識にとどめるべき(まあそれも怪しかった訳だが・・)
    # それに、俺たちが昔使ってた本にだって間違いは何かとあっただろ?
    # 本や解説の間違いで行き詰まるのも勉強だと思うよ。
    • by Anonymous Coward on 2008年04月01日 16時22分 (#1323238)
      > 元記事のコメントにscanfのバッファオーバフローに付いて言及しているものがあった。

      オーバフローというのは間違いで、次のようなコードで、どこを指しているかわからないポインタの 先のメモリを破壊するということを言いたかったのだと、想像します。

      int *n;
      scanf( "%d", n ); /* *nの値をキーボードなどから入力(Enterで終了) */

      親コメント
    • by tarosuke (2403) <webmaster@tarosuke.net> on 2008年04月01日 16時36分 (#1323258) 日記
      あれだと受け取ってるのが固定長の値なのでscanf内部でやらかしてない限りバッファオーバーフローはしない。
      「scanf->バッファオーバーフロー」という脊髄反射だろうよ。
      親コメント
    • by okky (2487) on 2008年04月01日 18時09分 (#1323342) ホームページ 日記

      突っ込む側もポイントをしぼって突っ込んでもらいたい。

      そこはほれ。話がポインタ操作間違いに関する話だけに、絞込みもままならないかと。
      # よし。うまい事いえたぞ。
      --
      fjの教祖様
      親コメント
  • by nique (17169) on 2008年04月01日 16時35分 (#1323256) 日記
    初心者向けにCの概念を解説しているわけでC++の記法にする必要がない部分ですよね。
    単に

    int n; // 整数型変数nを定義
    int *p; // 整数ポインタ型変数pを定義

    n = 5; // nに5を代入
    p = &n; // pにnのポインタを代入
    *p = 10; // pがポイントする変数に10を代入

    見たいに書けば間違いも起こりにくくわかりやすい気がするんですけど。
  • by doh (35450) on 2008年04月01日 17時42分 (#1323318) 日記
    変数宣言時に初期化していれば、この筆者にも問題がわかったのではなかろうか?

    int *n = NULL;
    *n = 5;
    いくらポインタに対する理解が適当でも、このコードを動くと思う人は、ほとんどいないと思うのだが。
    • Re:本当にひどい記事だが (スコア:2, おもしろおかしい)

      by Anonymous Coward on 2008年04月01日 19時20分 (#1323383)

      int *n = NULL;
      *n = 5;
      いくらポインタに対する理解が適当でも、このコードを動くと思う人は、ほとんどいないと思うのだが。

      その昔MS-DOSというメモリ保護のないOSがあってだな(以下3000コメントの懐古レス略)おそるべきことに「なんかnull pointer assignmentとか出てるけど動いてるんだからいいじゃん」という人たちが実在したんですよ。

      親コメント
  • gccに限った話になるのかもしれませんが、"-O0"(最適化なし)では予想通りSEGVしましたが、"-O2"するとコケないみたいです。



    もしかして無意識にオプティマイザに助けられていて意識するのを忘れていたとか?
    --
    -- やさいはけんこうにいちば〜ん!
    • by okky (2487) on 2008年04月01日 18時25分 (#1323348) ホームページ 日記
      いや、こけないわけではなくて…。

          movl    $5, %eax
          movl    %eax, 4(%esp)
          movl    $.LC0, (%esp)
          call    printf
      *n に入るべき値を %eax に代入しなおして、そっちを printf() に渡しているだけで。

      実はその前の1行:

          movl    $5, (%eax)
      が死ぬほどやばい。
      %eax は main() 関数に入ってきて以来、初期化されていない。
      その「どこを指しているんだかよく判らないもの」が指している所にドガンッと5を書いちゃってる

      これがヒープを壊しているのか、スタックを壊しているのかは判らないが(なんかヒープのどっかを指しているっぽい)、とにかく、どこかを壊しているのは間違いない。今回は小さなプログラムだったので、破綻が表出する前に終了しているのに過ぎない。
      --
      fjの教祖様
      親コメント
    • gcc4.0 on Leopardだと 無印、-O -O2 -O3 -Os すべて期待通り bus error です。
      --
      Best regards, でぃーすけ
      親コメント
typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...