Cでサイズ20 * 100000の2D配列を定義したい。サイズを固定しないでください。ダブルタイプの非常に大きな2D配列を定義する
2
A
答えて
1
double **twod = malloc(20 * sizeof(double *));
int i;
if (twod == NULL)
abort();
for (i = 0; i < 20; ++i)
if ((twod[i] = malloc(100000 * sizeof(double))) == NULL)
abort();
// clean up
for (i = 0; i < 20; ++i)
free(twod[i]);
free(twod);
最初malloc
コールは20のdouble
ポインタのためのスペースを割り当てます。各double
ポインタはサブアレイを指します。
ループ内の2番目のmalloc
コールは、各サブアレイに100000 double
を割り当てます。
free
の呼び出しは、malloc
の逆を行います。メモリをフリーストアに返します。まず、ループ内で各サブアレイを解放する必要があります。その後、配列自体も解放する必要があります。
戻り値malloc
をNULL
に対して調べます。 malloc
がNULL
を返した場合、システムのメモリは不足しています。これは、大量のメモリを割り当てるので重要です。 malloc
がNULL
を返した場合、アプリケーションはアボートされます。
1
あなたは、ポインタへのポインタを定義し、このようにそれを初期化する必要があります:
int i;
double **array;
array = malloc(sizeof(double *)) * 20);
for (i=0; i<20; i++) {
array[i] = malloc(sizeof(double) * 100000);
}
あなたはそれで終わったときにメモリをfree
することを忘れないでください。
0
あなたは断片化を避けるために、Variable-length array(C99以降)を使用することができます。
double (*array)[cols];
array = malloc(sizeof(*array) * rows);
このようにfree(array);
を呼んで十分です。
関連する問題
- 1. 大きい2D配列を定義しづらい - C++
- 2. 大きな2D配列の内部にある2D配列を見つける
- 3. 非常に大きな配列(ルックアップテーブル)を定義する最良の方法は何ですか?
- 4. 非常に大きな文字列でバイト配列
- 5. C++ループで非常に大きな配列を持つSIGSEGV
- 6. 非常に大きな配列のVecを初期化するには?
- 7. JavaScript:非常に大きな配列の最小値と最大値?
- 8. 非常に大きなタイムスタンプ
- 9. C++ MATLAB APIで2D配列を定義
- 10. Androidのヒープ1バイトの配列型が非常に大きい
- 11. 非常に大きいサイズの配列の割り当て
- 12. Python Datashaderで点の大きな2D配列をプロットする
- 13. 非常に大きな疎行列にPCAを適用する
- 14. C++の非常に大きな配列を特定の値で検索するには?
- 15. Pythonで大きな2D配列を操作する
- 16. 非常に大きな行列の転置を見つける
- 17. 配列の配列2D最大値
- 18. アストロピーとnumpyを使った非常に大きな配列の処理
- 19. 非常に大量の配列を作成するときのMemoryError
- 20. これはC++の有効な2D配列定義ですか?
- 21. 非常に大きな配列の文字列のインスタンスをカウントし、その値をハッシュ値に加算する
- 22. Javaの2D配列より大きい2Dグリッド
- 23. 非常に大きなビットマップを描く
- 24. Pythonの非常に大きなブールリスト
- 25. のJava - 非常に大きな数(600851475143)
- 26. vb.netで非常に、非常に大きな数字
- 27. R - 非常に大きなスパース行列の列を更新する
- 28. 大きなデータセットのLodash 2d配列の比較
- 29. 大きな2D配列の場合のSegフォールト
- 30. Cで大きな2Dのchar配列を宣言するには?
私たちと共有するコードがありますか? – jwpfox