ホームページ >バックエンド開発 >C++ >C 関数から 2D 配列を適切に返すにはどうすればよいですか?

C 関数から 2D 配列を適切に返すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 06:47:10945ブラウズ

How to Properly Return a 2D Array from a C   Function?

C で 2D 配列を返す

C で関数から 2D 配列を返すのは難しい作業になる場合があります。提供されたコードで示されているように、1 つのアプローチでは、以下に示すコードを使用して 2D 配列を返そうとしますが、このアプローチは適切ではありません。

int **MakeGridOfCounts()
{
    int cGrid[6][6] = {{0, }, {0, }, {0, }, {0, }, {0, }, {0, }};
    return cGrid;
}

代わりに、実行可能なアプローチとして、ポインターを作成して返す必要があります。動的メモリ割り当てを使用する 2D 配列。改善されたコード例でこれがどのように行われるかを見てみましょう:

#include <cstdio>

int** create2DArray(unsigned height, unsigned width) { .... } 
  1. 2D 配列の作成 ( create2DArray() ):

    • まず、2D 配列へのポインタと各要素へのポインタを作成します。 row.
    • 行にメモリを割り当て、次に各行に対して列にメモリを割り当てます。
int** array2D = new int*[height];
for (int h = 0; h < height; h++) {
   array2D[h] = new int[width];
   .
   .
   .
}
  1. 配列を返します (create2DArray() ):

    • 配列が作成されると、最初の行 (array2D) へのポインターが返されます。このポインタは配列全体を表します。
  2. メモリのクリーンアップ (main() ):

    • を解放することが重要です2D 配列が不要になった場合は、2D 配列に割り当てられたメモリ。これには、各行のメモリを削除してから、メモリ リークを防ぐために最初の行へのポインタを削除することが含まれます。
for (int h = 0; h < height; h++) {
  delete [] array2D[h]; 
}
delete [] array2D;

このアプローチにより、適切なメモリ管理が確保され、 C の関数からの 2D 配列。

以上がC 関数から 2D 配列を適切に返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。