|
在int devices_init (void)中会依次
调用devlist = ListCreate (sizeof (device_t)) //device_t 是个结构体。
list_t ListCreate (int elementSize)
{
list_t list;
list = (list_t) (NewHandle (sizeof (ListStruct)));
if (list) {
(*list)->signature = LIST_SIGNATURE;
(*list)->numItems = 0;
(*list)->listSize = 0;
(*list)->itemSize = elementSize;
(*list)->percentIncrease = kDefaultAllocationPercentIncrease;
(*list)->minNumItemsIncrease =
kDefaultAllocationminNumItemsIncrease;
}
return list;
}
Handle NewHandle (unsigned int numBytes)
{
void *memPtr;
HandleRecord *hanPtr; /* HandleRecord是一个结构*/
memPtr = calloc (numBytes, 1); /* 分配ListStruct结构地址空间*/
hanPtr = (HandleRecord *) calloc (sizeof (HandleRecord), 1);/* 分配HandleRecord结构地址空间*/
if (hanPtr && (memPtr || numBytes == 0)) {
hanPtr->ptr = memPtr; /*hanPtr->ptr指向ListStruct结构的地址*/
hanPtr->size = numBytes; /*hanPtr->size指向ListStruct结构的大小*/
return (Handle) hanPtr;
} else {
free (memPtr);
free (hanPtr);
return NULL;
}
}
问大侠:上面 return (Handle) hanPtr //是HandleRecord结构体指针。
typedef struct
{
void *ptr;
unsigned int size;
} HandleRecord;
list = (list_t) (NewHandle (sizeof (ListStruct))); 这句我理解的意思
是将HandleRecord结构体的地址与ListStruct结构体的地址相同。
typedef struct ListStructTag
{
......
} ListStruct;
typedef struct ListStructTag **list_t; ,
那么在下面的语句中是否会存在ListStruct结构体中的内容覆盖HandleRecord结构体中的内容?
if (list) {
(*list)->signature = LIST_SIGNATURE;
(*list)->numItems = 0;
(*list)->listSize = 0;
(*list)->itemSize = elementSize;
(*list)->percentIncrease = kDefaultAllocationPercentIncrease;
(*list)->minNumItemsIncrease =
kDefaultAllocationminNumItemsIncrease;
}
如果不会覆盖的话,那是否是hanPtr->ptr = memPtr; /*hanPtr->ptr指向ListStruct结构的地址*/
hanPtr->size = numBytes; /*hanPtr->size指向ListStruct结构的大小*/
这2个语句的顺序不能更改?如果将顺序更改成程序是否会出现问题?
hanPtr->size = numBytes; /*hanPtr->size指向ListStruct结构的大小*/
hanPtr->ptr = memPtr; /*hanPtr->ptr指向ListStruct结构的地址*/
不知道我讲明白了没有:dizzy:
|
|