Ede*_*nia 1 c free memory-management function
我们得到了如下的2D分配:
char** arr;
short i = 0;
arr = malloc(sizeof(char*)*10);
for( ; i<10; i++)
{
arr[i] = malloc(sizeof(char)*100);
}
Run Code Online (Sandbox Code Playgroud)
分配arr[10][100];
然后我们需要像这样释放它:
for(i=0; i<sizeof(arr); i++) free(arr[i]);
free(arr);
Run Code Online (Sandbox Code Playgroud)
所以我想创造一个节省时间,空间和混乱的功能,我有这个:
void pfree(void** data)
{
int i;
for(i=0; i<sizeof(data); i++)
{
free(data[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
功能是相关的,如果没有另外的方法吗?
创建这样的函数是完全合理的.特别是如果它:
我可能会写一个malloc_2d()和free_2d():
void free_2d(void **arr, size_t count) {
int i;
if (arr) {
for (i=0; i<count; ++i)
free(arr[i]);
free(arr);
}
}
void** malloc_2d(size_t count, size_t elem_count, size_t elem_size) {
int i;
void **arr = calloc(count, sizeof(void *));
if (arr == NULL)
return NULL;
for (i=0; i<elem_count; ++i) {
arr[i] = calloc(elem_count, elem_size);
if (arr[i] == NULL) {
free_2d(arr, i);
return NULL;
}
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
或者,常见的机制是将二维阵列编码成一维阵列.所以,假设我们想要一个16x4阵列.
int *arr = malloc(sizeof(int) * 6 * 4);
for (int i=0; i<16; ++i)
for (int j=0; j<4; ++j)
arr[i*4 + j] = compute(i, j);
Run Code Online (Sandbox Code Playgroud)