2011-06-29 9 views
-7

私はLinux製品の3行(バージョン)を持っています。 V1は、顧客でうまく動作します。 V2とV3 がクラッシュし、修正はmalloc呼び出しの後のmemset呼び出しのようです。memset after malloc

このトピックについての深い説明は何ですか?なぜmemsetが問題を解決したのですか?

+4

一部のコードを表示します。 – cnicutar

+0

私の車は壊れている、私はそれを起動した後それは動作しないようだ。私の友人は同じ車を持っていて、それは壊れません。どうしたの? - コードを追加してください。私たちは預言者ではありません。 –

+0

@cnicutarはV1でひどいですか? – cateof

答えて

3

コード例のない私の推測では、あなたがバッファまたは構造体で操作していて、その内容が特定のデフォルト値で初期化されることを仮定してmallocされていると思います。 Mallocはメモリを初期化しませんので、memsetや他の初期化を使用しない限り、そのメモリの値は何でもかまいません。したがって、ポインタがNULLであると仮定してポインタをチェックしようとしている場合、 intはゼロになります。最初にメモリを初期化せずにその前提を行うことはできません。

+0

ありがとうございました。あなたの推測が私を助けました。 – cateof

2

おそらく、割り当てられたバッファがゼロになっているという誤った仮定があるためです。たとえば、バッファに文字列が含まれていて、初期化する前にどこかに出力されている場合、アクセス違反が発生する可能性があります。バッファをゼロにすると、このような問題が解決されます。