结构体与二级指针初始化赋值案例
记录下今天遇到的二级指针初始化一直失败问题,在二级指针申请和赋值的时候,要注意访问的是哪一个具体的地址,直接访问arr 是二级指针,访问arr[i] 其实也是二级指针(我的理解),访问((*arr)[i] 才是访问的真正的资源。
不建议这种初始化方式,编码建议里有一条就是 资源初始化和释放尽量在同一层级。
代码如下:
typedef struct {
char name[10];
uint32_t size;
} Example;
int MallocAndInitExample(Example **arr, uint32_t *size)
{
*arr = (Example *)malloc(sizeof(Example) * 10);
if (*arr == NULL) {
printf("malloc error!!!");
return -1;
}
*size = 10;
for (int i = 0; i < 10; i ++) {
memcpy((*arr)[i].name, "test", strlrn("test"));
(*arr)[i].size = i;
}
return 0;
}
int TEST()
{
Example *arr = NULL;
int32_t size
if (MallocAndInitExample(&arr, &size) != 0) {
return -1;
}
if (arr == NULL) {
return -1;
}
// 此时arr结构体指针被初始化为size个 Example
other
return 1;
}