0

我使用下面的代码来创建动态内存。

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

但是,我更喜欢创建一个指针数组。每个指针将链接到其中一个内存块。

4

4 回答 4

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 回答
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 回答
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 回答
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));}

我认为这就是我们分配动态双维内存分配的方式。希望这将有助于达到目的。

于 2012-07-13T06:33:53.843 回答