以下のコードを使用して動的メモリを作成しました。
unsigned int *mem ;
mem = (unsigned int*) malloc(mallocSize);
ただし、ポインターの配列を作成することを好みます。各ポインターは、メモリ ブロックの 1 つにリンクします。
以下のコードを使用して動的メモリを作成しました。
unsigned int *mem ;
mem = (unsigned int*) malloc(mallocSize);
ただし、ポインターの配列を作成することを好みます。各ポインターは、メモリ ブロックの 1 つにリンクします。
しかし、各ポインターが上記のメモリブロックの1つにリンクするポインターの配列を作成することを好みます
unsigned int **mem = (unsigned int **)malloc(sizeof(unsigned int *) * number_of_pointers);
// memset(mem, NULL, sizeof(unsigned int *) * number_of_pointers); // recommend it but not needed here, we always set NULL for safety.
for (int index = 0; index < number_of_pointers; index++)
mem[index] = (unsigned int *)malloc(sizeof(unsigned int) * number_of_ints);
個々の要素にアクセスするmem[row_index][column_index]
割り当てを解除し、メモリ リークを削減または削除します。
for (int index = 0; index < number_of_pointers; index++)
free(mem[index]);
free(mem);
とにかく、経験則として、私にとっては、できるだけfree
頻繁に呼び出す必要がありますmalloc
以下のコードでそれができると思います。ポインターの配列を作成し、配列の各要素の各メモリ ブロックへのポインターを格納できます。ただし、重要な点は、unsigned int * の配列がある場合、malloc に渡されるサイズは sizeof(unsigned int) でなければならないということです。以下の例を他のタイプに変更できます。
unsigned int *mem[100];
for (i=0; i<100; i++)
{
mem[i] = malloc(sizeof(unsigned int));
}
unsigned int **pMemory;
pMemory = (int**)malloc(sizeof(unsigned int *) *number_of_pointers);
for(int index_to_pointer = 0; \
index_to_pointer < number_of_pointers; \
index_to_pointer++)
{ pMemory[index_to_pointer] = (int*)malloc(sizeof(unsigned int));}
これが、動的な2次元メモリ割り当てをどのように割り当てたかだと思います。これが目的に役立つことを願っています。
C では、配列は常にコンパイル時の固定サイズです。それで問題ない場合は、配列構文を使用します。
unsigned int *mem[NUM_PTRS];
for (int i=0; i<NUM_PTRS; i++) {
mem[i] = malloc(mallocSize);
}
実行時にサイズを決定する必要がある場合は、ポインターからポインターが必要です。
unsigned int **mem;
mem = malloc(sizeof(unsigned int *) * num_ptrs);
for (int i=0; i<num_ptrs; i++) {
mem[i] = malloc(mallocSize);
}