【发布时间】:2022-11-01 12:23:44
【问题描述】:
我正在摆弄和学习 void 指针和链表,我想我可能不得不在概念和应用上有点错误。
目前,我有一个 void 指针,它指向内存中结构的地址。然后我试图通过将 void 指针转换为该结构来访问该结构。但是,我没有得到预期值0.
代码如下。
void *data = ListGetItemAtIndex(freeList, i); // returns void *
memoryBlock *block = (memoryBlock *) data;
printf("%ld\n\n", 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;
【问题讨论】:
-
下面的代码代码如下是正确的,如果您只有一个指向结构的 void 指针,这就是您访问结构的方式。你的问题是什么?
-
我的问题是为什么我的代码当前没有返回预期值 1000 而不是返回 0
-
请edit 并显示minimal reproducible example。您未显示的代码中可能存在错误。
-
return malloc(sizeof(block));返回新分配的、未初始化的内存。它确实不是包含您写入本地block变量的值 -
哦,天哪,你是对的。那里有点脑残。我将如何访问这些成员。请原谅这个简单的问题,但我的大脑似乎不太了解这个问题