-7

Linux 製品の 3 つのライン (バージョン) があります。V1 は顧客で正常に動作します。V2 と V3 がクラッシュし、修正は malloc 呼び出し後の memset 呼び出しのようです。

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

4

2 に答える 2

3

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

于 2011-06-29T16:13:37.017 に答える
2

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

于 2011-06-29T16:12:10.067 に答える