gpt4 book ai didi

c - 是否可以创建无指针函数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:21:03 25 4
gpt4 key购买 nike

我们得到一个二维分配如下:

char** arr;
short i = 0;

arr = malloc(sizeof(char*)*10);
for( ; i<10; i++)
{
arr[i] = malloc(sizeof(char)*100);
}

分配 arr[10][100];然后我们需要像这样释放它:

for(i=0; i<sizeof(arr); i++) free(arr[i]);
free(arr);

所以我想做一个可以节省时间、空间和困惑的功能,我有这个:

void pfree(void** data)
{
int i;

for(i=0; i<sizeof(data); i++)
{
free(data[i]);
}
}

这个函数是否相关,如果不相关还有其他方法吗?

最佳答案

这样创建函数是完全合理的。特别是如果它:

  1. 提高代码的清晰度
  2. 降低出现错误的可能性

我可能会写一个 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;
}

或者,一种常见的机制是将二维数组编码为一维数组。因此,假设我们想要一个 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);

关于c - 是否可以创建无指针函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com