如何创建在内存中分配的数组

时间:2012-07-13 06:02:06

标签: c

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

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

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

4 个答案:

答案 0 :(得分:1)

我想下面的代码应该为你做。您可以创建一个指针数组,然后将指针存储到数组的每个元素中的每个内存块。但是,重要的一点是,如果你有一个unsigned int *数组,传递给malloc的大小必须是sizeof(unsigned int)。您可以修改以下示例以获取其他类型。

unsigned int *mem[100];

for (i=0; i<100; i++)
{
  mem[i] = malloc(sizeof(unsigned int));
}

答案 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

答案 2 :(得分: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);
}

答案 3 :(得分: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));}

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

相关问题