サイズ10の配列を作成すると、残りのスペースが無駄になるように2つの要素だけが配列に格納されます。どうすればこの問題を解決できますか? (データ構造別)どのように使用されていない配列の領域を節約できますか?
答えて
配列の代わりに単純なリンクリストを使用するか、配列を使用する必要がある場合はrealloc()
を使用すると、2つのセルだけを使用するように配列が縮小されます。このような10. :
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int* ptr = malloc(10 * sizeof(int));
ptr[0] = 4;
ptr[1] = 13;
ptr = realloc(ptr, 2 * sizeof(int));
printf("%d %d\n", ptr[0], ptr[1]);
return 0;
}
出力:
問題を解決していただきありがとうございます –
@NachiketMore then * accept *私の答えをお願いします。あなたは私の投稿の左側にあるチェックマークをクリックすることでそれを行います。 – gsamaras
ほとんどの場合、動的メモリ割り当てが使用されます。これは、最初のメモリ量を取得するためにmalloc
を呼び出すことを意味し、必要に応じてrealloc
、スペースがなくなったらfree
、メモリをアリーナに戻すことを意味します。標準入力から行を読み込む関数です。動的に割り当てられたメモリを返します。
#define INITALLOC 16 /* #chars initally alloced */
#define ALLOCSTEP 8 /* #chars to realloc by */
int getline(char **dynline)
{
int i, c;
size_t nalloced; /* #chars currently alloced */
if ((*dynline = malloc(INITALLOC)) == NULL)
return -1; /* return -1 on mem. err */
nalloced = INITALLOC;
for (i = 0; (c = getchar()) != EOF; ++i) {
/* buffer is full; request more mem */
if (i == nalloced)
if ((*dynline = realloc(*dynline, nalloced += STEP)) == NULL)
return 0;
/* store the newly read character */
(*dynline)[i] = c;
}
/* zero terminate the string */
(*dynline)[i] = '\0';
if (c == EOF)
return 0; /* return 0 on EOF */
return 1;
}
この関数のユーザーは、メモリを解放する責任があります。例:
char *buf;
printf("What is your full name?\n");
if (getline(&buf) > 0)
puts(buf);
free(buf);
もちろん、いくつかの無駄がありますが、配列を使用して解決することは不可能です。リンクリストを検討するhttps://www.cs.cmu.edu/~adamchik/15-121/lectures/Linked%20Lists/linked%20lists.html
- 1. リポジトリをライトモードで複製してディスク領域を節約できますか?
- 2. ヌル値は記憶領域を節約しますか?
- 3. 既存のd3領域をスタック領域に変換するにはどうすればよいですか?
- 4. CSSを使用して領域を解除できないようにするにはどうすればよいですか?
- 5. は、どのように私は領域を使用してアマゾンウェブサービス(AWS)地域名を取得したい地域
- 6. 列挙型はインスタンス化されていないときに記憶領域を持っていますか?
- 7. スタック領域としてメモリ領域を使用しますか?
- 8. テキスト領域の列の幅はどれくらいですか?
- 9. どのように地形領域のウェイポイント配列を作成できますか?
- 10. シェイプの領域を使用してこの配列からシェイプを削除するにはどうすればよいですか?
- 11. シェイプを使用してクリッピング領域を定義するにはどうすればよいですか?
- 12. javascriptを使用してフリーズ/非スクロールウィンドウ領域を作成するにはどうすればよいですか?
- 13. Chromeがテキスト領域をオートコンプリートしないようにするにはどうすればよいですか?
- 14. OpenMPで並列領域を条件付きで終了するにはどうすればよいですか?
- 15. プッシュされていない領域を入れました
- 16. Android:指のいずれかで領域が押されているかどうかを検出します。
- 17. イメージの領域のようなセクタを、MATLABを使用して領域のような別のセクタにワープする方法はありますか?
- 18. ルートプロジェクトの領域表示テンプレートを使用していますか?
- 19. 配列を使用して追加領域を追加する
- 20. C#ListView、View = List - 下の未使用領域を取り除くにはどうすればよいですか?
- 21. 周波数領域でコンボリューションをどのように実装できますか?
- 22. jscrollpane領域をスクロールするにはどうすればよいですか?
- 23. Google App Engineで使用する領域を定義するにはどうすればよいですか?
- 24. スウィフト:オブジェクトの領域配列からオブジェクトを見つけるために、どのように配列
- 25. Android WebView:コンテキストメニューをテキスト領域で使用するにはどうすればよいですか?
- 26. 人工知能のどの領域がデータの推測に使用されていますか?
- 27. IntroJsはどのように強調表示された領域を達成していますか?
- 28. テーブルで使用される領域
- 29. イメージマップの領域をチェックボックスのように動作させるにはどうしたらいいですか?
- 30. WPFタブコントロールのタブ領域をコントロールよりも小さくするにはどうすればよいですか?
の配列を作成しますize 2?それはオプションですか? – Daniele
配列が動的に割り当てられている場合は、単にrealloc()を使用できます。 – Frank
@ Danieleはい、データ構造を使用することでそれを避ける方法はありますか? –