質問

最近、私は、出場する必要の二つのファイルの黄金期待される)を検証試験結果のものに書き込まれたデータの両方のファイルのファイルが一致しませんでした。

さらなる調査では、私が存在することが分かった。構造を含む整数をchar配列の64バイトをするわけではないし、すべてのバイトのchar配列により多くの方からのほとんどに使用されています。る場合、未使用分野の配列からランダムなデータを含むことになるが、ミスマッチ

このことによりお伺いさせて頂きるかという疑問にも良い練習を初期化する配列のC/C++としても、そのままでJava?

役に立ちましたか?

解決

あなたがそれらを使用する前に、メモリ/変数を初期化することをお勧めします - 初期化されていない変数は、多くの場合、追跡することは非常に困難なバグの大きな源である

。 ファイル形式に書き込む際に

すべてのデータを初期化することは非常に良いアイデアです:それは(誰かが誤って初期化されていないデータを「使う」しようとした場合ので、彼らは問題を受けにくい、と扱いやすいクリーナーファイルの内容を保持しますただ、はるかに圧縮将来のデータ)を読み込み、ファイルを作る独自のコードではないかもしれないことを覚えています。

あなたがそれらを使用する前に、変数を初期化するだけではなく、正当な理由は、初期化は技術的には「不要」であると大きなオーバーヘッドが発生し、パフォーマンスが重要な状況です。しかし、ほとんどの場合、初期化の変数は、(彼らは彼らだけが使用されている直前に宣言されている場合は特に)重大な害を引き起こすことはありませんが、バグの共通のソースを排除することによって、あなたの開発時間を大幅に節約されます。

他のヒント

を未定義の値が配列で結果が未定義の動作です。このプログラムは無料を異なる結果となった。この味するのは、ファイルの終わが若干異なる、またはプログラムがクラッシュ、プログラム形式でおハードディスクドライブのプログラムが原因の鬼飛び出し、ユーザーの鼻( http://catb.org/jargon/html/N/nasal-demons.html )

こんに定義する必要がありご配列値を作成する場合、配列の中ですることを保証する必要だinitialiseる配列値を使用します。もちろん最も簡単な方法をここを作成する場合は、配列になります。

MyStruct array[10];
printf( "%f", array[2].v ); // POTENTIAL BANG!
array[3].v = 7.0;
...
printf( "%f", array[3].v ); // THIS IS OK.

ることを忘れないでください膨大な配列のポッドが素敵な記法にinitialise全員がゼロに

MyPODStruct bigArray[1000] = { 0 };

私は強くそうすることが、「バグの共通のソースを排除する」または「あなたのプログラムの正しさとその意志の混乱をやっていない」であることを与えられた意見に同意しません。プログラムは初期化されない値で動作する場合、それはバグがあり、間違っています。彼らはしばしば、まだ最初の使用で期待値を持っていないので、値を初期化すると、このバグがなくなるわけではありません。彼らはランダムなゴミが含まれている場合しかし、プログラムは、すべての試みでランダムにクラッシュする可能性が高いです。常に同じ値を持つことはクラッシュで、より確定的な動作を与えるとデバッグを容易にすることがあります。

は、あなたの特定の質問のために、また、彼らがファイルに書き込まれる前に、彼らはあなたがパスワードのように、書き込まれたくない以前の使用から何かが含まれている可能性があるため、未使用のパーツを上書きする優れたセキュリティの実践である。

ない場合は初期化の価値はc++の配列、その値が設定だった方がいいでしょう練習をゼロにしたい場合に予測できます。

がご利用の場合、char配列のようにnull終了文字列、その対応することができるでしょう書きファイルには適切な機能です。

はc++で使用のよりOOPます。イタリアンモーダアプリをベクトルの文字列。

いつ配列で初期化されていない場合に有効な特性を持っていよう。

この悪 読書 から初期化されていない配列.を有しないうちに来からの読み出し初期化されていない場所です。

その場合プログラムのバグで読みから初期化されていない場所に配列してある"ので"による守備の初期化全ての配列既知の値は解決にはならないバグ、できるだけで面ます。

この書き記事の違い、タイムアウトカフェ&ダイナーで出会い、人の変数を初期化する場合、宣言および人を初期化が必要です。私共は大きなプロジェクトの方は最初のカテゴリ今までの確認コードが正りのタイプです。常に変数を初期化をもたらし、より繊細なバグや問題以上のようにとんでいきたいと思ってい説明を記憶する例です。最初の例:

struct NODE Pop(STACK * Stack)
{
  struct NODE node = EMPTY_STACK;

  if(Stack && Stack->stackPointer)
    node = Stack->node[--Stack->stackPointer];

  return node;
}

このコードのその他のね。この関数の機能を利用す(このテキストインデックス500 000 000文に複ツリーは、FIFOのスタックが利用するのが、繰り返し使いたいのは再帰的に機能します。これは典型的な彼の画風のため、体系的な初期化の変数.の問題がコードの隠し memcpy の初期化のその他の構造物(ねったいないとの通話を memcpy gccの不思議なものでした3枚+隠れた関数呼び出しの暑機能のプロジェクト.書き換えで

struct NODE Pop(STACK * Stack)
{
  if(Stack && Stack->stackPointer)
    return Stack->node[--Stack->stackPointer];
  return EMPTY_STACK;
}

一つだけコピー(資料の利益のSPARCが、その機能は葉機能の回避を呼 memcpy る必要がありませんの構築新規登録のウィンドウ)が開きます。その機能を4倍になります。

その他の問題からオンスがわからないがそうなコード例では、申し訳ありません).変数の初期化時に宣言されていたのを使用することで、 switch 有限状態オートマトンこの問題の初期化した値がないといけない状態オートマトンと超一のオートマトンなが機能しなくなっていたのを修正の初期化子にコンパイラの警告を出したかの変数が使用される前にで適切に初期化されます。固定のオートマトンは簡単でした。徳:守備initialising変動が抑制で置する警告のコンパイラです。

結論:Initialiseご変賢く.こsystematicalyなどの貨物-カルト(自分の相棒での作業は悪貨物culterで想像し、いませんのでよろしくお願い使用後藤常に変数の初期化に使用の静的な宣言でフォームコントロール間の相互ye知(がもう遅いSPARC64bit)、すべての機能 inline 場合であっても500回線を使用 __attribute__((always_inline)) 時のコンパイラのない)

あなたのプログラムの正しさを持つので、意志の混乱を行っていない場合は、

まず、あなたは配列、変数などを初期化する必要があります。

第二に、この特定のケースでは、配列を初期化すると、元のプログラムの正しさに影響を与えなかったではないと思われます。代わりに、ファイルを比較することを意図したプログラムは、ファイルは意味のある方法での異なる場合伝えるために使用されるファイル形式について十分に把握していないの(最初のプログラムで定義された「意味のある」)。

の代わりに元のプログラムに文句を、私は、問題のファイル形式についての詳細を知るために比較プログラムを修正します。ファイル形式は十分に文書化されていないなら、あなたは文句を言うために正当な理由を持っています。

私はC ++で良い練習がのstd ::ベクトル<>の代わりに、配列を使用していると言うでしょう。もちろんこれは、Cには有効ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top