例:配列に整数{1,2,3,4}が含まれています {2,3,4}を格納するために配列のサイズを変更したいのですが、配列[0]を実行すると2になります。配列のサイズを再割当てする方法は?
答えて
realloc()
で配列を縮小すると、配列の最後にはスペースを削除できますが、配列の先頭にはスペースを削除できません。
/* setup */
int *data = malloc(4 * sizeof(int)); // Error check omitted
for (int i = 0; i < 4; i++)
data[i] = i + 1;
/* setup complete */
/* Move elements before shrinking array */
memmove(&data[0], &data[1], 3 * sizeof(int)); // Safe move
int *new_data = realloc(data, 3 * sizeof(int));
if (new_data != 0)
data = new_data;
「縮小するかどうか私はわからない:したがって、あなたが望む結果を達成するために、あなたはその新しい位置に維持し、その後、配列のサイズを変更したい配列の一部をコピーする必要があるだろう'realloc()
はNULLを返すことはありませんが(標準ではできないと言っているわけではありません)、コードにはチャンスはありません。多くの人がdata = realloc(data, 3 * sizeof(int));
と書いてリスクを冒すと、彼らはほとんどすべての時間を離れます。 realloc()
は実際にはNULLを返すことができ、old_ptr = realloc(old_ptr, new_size)
のイディオムを使用するとメモリがリークすることに注意してください。
通常、 'shrinking' realloc()
は元のポインタを返します(NULLを返す可能性がある場合はゼロサイズに縮小しない限り)。 「成長する」realloc()
は、データが格納されている場所を変更することがよくあります。
"realloc()が縮小してもNULLを返すことができるかどうかはわかりません" - それは間違いなく可能です。たとえあなたが2Mの配列を、例えば10バイトに 'realloc 'しても、10バイトの空きがないことは間違いありません。そのため、古いポインタをどこか安全に保つ必要があります。 – tofro
@tofro 1. 2MBの配列を10バイトに縮小する場合、メモリマネージャは10バイトを使用できるようにする必要があります。 2.できないとしても、なぜ元のポインタを返すことで縮小が成功したと「realloc」しないのでしょうか? – jamesdlin
@jamesdlin実装が主張するすべてのことが*起こることがあります。 On(2):ライブラリ関数は、実行されるべきことができないときに "all OK"を返しますか? "NULLを返す"場合は、このために予約されています( "古いブロックをそのまま残しておきます")。 – tofro
- 1. 構造体の配列を再割り当てする方法
- 2. C++クラス配列のメモリ割り当ての再割り当て
- 3. アレイを割り当て、ハイブに配列のサイズを見つける方法は?
- 4. **配列の再割り当て
- 5. ポインタ配列の一部を再割り当てする安全な方法
- 6. C++で文字列配列を割り当てる方法は?
- 7. 配列の配列の配列にメモリを割り当てる方法
- 8. python-pandasのgroupbyを配列に割り当てる方法は?
- 9. 配列のオブジェクトに変数を割り当てる方法は?
- 10. Matlabのイメージ配列に値を割り当てる方法は?
- 11. 配列のメモリを再割り当てするC++
- 12. 静的配列の内容にポインタ配列を割り当てる方法は?
- 13. Suitecrm/Sugarcrm ..テンプレートファイルに配列を割り当てる方法は?
- 14. OpenTK - キューマップ配列にストレージを割り当てる方法は?
- 15. 配列に値を割り当てる方法は?
- 16. PHP assositive配列に要素を割り当てる方法は?
- 17. ポインタに2次元配列を割り当てる方法は?
- 18. 割り当て、配列は
- 19. ポインターの配列の関数にメモリを割り当てて値を割り当てる方法は?
- 20. javascriptのGoogleマップマーカー配列に値を割り当てる方法
- 21. スイッチループ内の配列に変数を割り当てる方法
- 22. 割り当ての配列
- 23. Cで別の文字配列にchar配列を割り当てる方法
- 24. 非常に大きいサイズの配列の割り当て
- 25. charへのポインタの配列を再割り当て
- 26. 条件に応じた配列サイズの割り当て
- 27. テンソル値をnumpy配列に割り当てる方法
- 28. JProfilerで配列を割り当てる方法
- 29. バイト配列に値を割り当てる方法
- 30. クラス配列に要素を割り当てる方法
配列が動的でない限り、配列はまったく収縮していません。それでも、コンテンツを回転させるために何らかの作業が必要になります。コードが必要です。あなたのことから始めましょう。あなたはどのような種類の配列(動的対固定)を持っているのか、それまでにあなたの問題を解決しようとしてきたのか分かりません。 – WhozCraig