0

以下のコードを使用して動的メモリを作成しました。

unsigned int *mem  ;
mem = (unsigned int*) malloc(mallocSize);

ただし、ポインターの配列を作成することを好みます。各ポインターは、メモリ ブロックの 1 つにリンクします。

4

4 に答える 4

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

于 2012-07-13T06:10:56.203 に答える
1

以下のコードでそれができると思います。ポインターの配列を作成し、配列の各要素の各メモリ ブロックへのポインターを格納できます。ただし、重要な点は、unsigned int * の配列がある場合、malloc に渡されるサイズは sizeof(unsigned int) でなければならないということです。以下の例を他のタイプに変更できます。

unsigned int *mem[100];

for (i=0; i<100; i++)
{
  mem[i] = malloc(sizeof(unsigned int));
}
于 2012-07-13T06:05:17.430 に答える
0
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次元メモリ割り当てをどのように割り当てたかだと思います。これが目的に役立つことを願っています。

于 2012-07-13T06:33:53.843 に答える
0

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);
}
于 2012-07-13T06:07:00.197 に答える