我使用下面的代码来创建动态内存。
unsigned int *mem ;
mem = (unsigned int*) malloc(mallocSize);
但是,我更喜欢创建一个指针数组。每个指针将链接到其中一个内存块。
我使用下面的代码来创建动态内存。
unsigned int *mem ;
mem = (unsigned int*) malloc(mallocSize);
但是,我更喜欢创建一个指针数组。每个指针将链接到其中一个内存块。
我想下面的代码应该为你做。您可以创建一个指针数组,然后将指向每个内存块的指针存储在数组的每个元素中。但是,重要的一点是,如果您有一个 unsigned int * 数组,则传递给 malloc 的大小必须是 sizeof(unsigned int)。您可以将以下示例修改为其他类型。
unsigned int *mem[100];
for (i=0; i<100; i++)
{
mem[i] = malloc(sizeof(unsigned int));
}
但我更喜欢创建一个指针数组,每个指针链接到上面的内存块之一
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
数组在 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);
}
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));}
我认为这就是我们分配动态双维内存分配的方式。希望这将有助于达到目的。