我在摆弄和学习无效指针和链表,我认为我可能在概念和应用方面有点错误。
目前,我有一个空指针,它指向内存中结构的地址。然后,我试图通过将void指针强制转换为该结构来访问该结构。然而,我并没有得到期望的值,只有0。
代码如下。
void *data = ListGetItemAtIndex(freeList, i); // returns void *
memoryBlock *block = (memoryBlock *) data;
printf("%ldnn", block->startAddress);
结构体:
typedef struct
{
size_t startAddress;
size_t memory;
} memoryBlock;
添加结构时的地址:
0x5593c4812720
无效地址*:
0x5593c4812720
核心问题是,如何使用这个void指针来访问结构中的数据。
请求的示例:
块创建
static memoryBlock* CreateMemoryBlockPointer(size_t startAdress, size_t size)
{
memoryBlock block;
block.startAddress = startAdress;
block.memory = size;
return malloc(sizeof(block));
}
任务:
memoryBlock *ptr = CreateMemoryBlockPointer(StartAddress, size);
// Add initial 1st element
ListAddTail(freeList, ptr);
原型:
int ListAddTail(linkedList *list, void* data)
添加到列表
el->data = data;
el->next = NULL;
已解决,请参阅:
首先分配内存,然后写入内存,例如:
memoryBlock *block = malloc(sizeof(*block)); block->startAddress = startAddress;
等等。然后返回块;在功能的末尾–
- @邪恶羊