2 次元配列の行と列と共に 2 次元配列のアドレスを関数に渡したとします。
この関数は、2 次元配列のアドレスを 1 次元配列として扱います。(例: int マトリックス[] )
以下のコードを実行すると:
int** arr;
arr = new int*[row];
for ( int i = 0; i < row; i++ )
{
arr[i] = new int[column];
}
仮説として、マルチスレッド システムでは、これにより 2 次元配列に連続したメモリが割り当てられない可能性があると思います。私は正しいですか?
ただし、シングルスレッドシステムでは、これにより2次元配列に連続したメモリが割り当てられると思います。私は正しいですか?もしそうなら、それは「常に」真実ですか?それともコンパイラとOSに依存しますか?
コードが次の場合:
int** arr; int** arr2; arr = new int*[row]; arr2 = new int*[row]; for ( int i = 0; i < row; i++ ) { arr[i] = new int[column]; arr2[i] = new int[column]; }
連続したメモリ 2 次元配列がありません。各行の要素が連続していても、行自体は次の行と連続していません。私は正しいですか?
上記のすべてが正しければ、C++ では、すべての 2 次元配列が連続したメモリであるとは限りませんよね?