我使用下面的代码创建动态内存。
unsigned int *mem ;
mem = (unsigned int*) malloc(mallocSize);
但是,我更喜欢创建一个指针数组。 每个指针都将链接到一个内存块。
答案 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));}
我认为这是我们分配动态双维内存分配的方式。希望这有助于达到目的。