3

テストする方法が見つからないので、reallocの2番目のパラメーターが実際に何であるかを誰かが説明できますか。

このようなものがあるとします

int *p = malloc(sizeof(int)); //we have just enough space to store single int value

p に 2 つの int 値を格納したい場合 2 * sizeof(int)は、ブロックの新しいサイズの 2 番目のパラメーターとして realloc に送信する必要がありますか、またはsizeof(int)int のサイズのメモリを拡張する必要があるためです。

この場合、新しいブロックの合計値を再割り当てするために送信する必要がある場合、単に2 * sizeof(int)送信しsizeof(int)、元のポインターを返すだけで、メモリ内または他の何かで何もしない場合はどうなりますか?

4

2 に答える 2

5

2番目のパラメーターは、メモリー・ブロックの新しいサイズ(合計の新しいサイズ)(バイト単位)です。2インチのスペースが必要な場合は、を使用します2 * sizeof(int)

元のポインタを返すだけで、メモリ内などで何もしませんか?

これは仕様によって保証されていません。多くの実装では、元のポインタを変更せずに返すだけですが、同じように簡単に移動できます。2 intに十分な大きさの新しいメモリ割り当ては取得されませんが、。に十分な大きさのメモリ位置にある元のデータ値のみが取得されsizeof(int)ます。

于 2012-05-10T01:18:55.950 に答える
1

割り当ての新しい合計サイズをreallocに通知します。したがって、あなたの例から、2 * sizeof(int)

2番目の質問は完全には明確ではないので、これらすべての部分を1つの文にまとめようとします。mallocへの元の呼び出しと同じサイズ値でreallocを呼び出す場合、元のポインターを返すか、データを(実装で定義された)より便利な場所に移動するかは、実装次第です。int次に、1つだけを要求したスペースに2つを格納しようとすると、int未定義の動作がトリガーされます。他の割り当てられたメモリを破壊する(計算で間違った結果を引き起こす)か、(より可能性が高い)malloc自身の簿記データを破壊する可能性があります(mallocが実際にデータを確認するときに、プログラムがSegfaultで中止される可能性があります。

于 2012-05-10T01:18:45.347 に答える