我目前正在修改转储程序,但我无法弄清楚如何使用void指针正确导航。下面是我正在使用的功能,以及我尝试执行的指令。我已经尝试将mem转换为结构体,但我不确定sytnax并且我一直收到错误。对于下面的代码,我得到的具体错误是:
47 | mem = mem->tcbtio
===========> .........a..............................................
*=ERROR===========> a - CCN3122 Expecting pointer to struct or union.
这是我的功能:
void hexdump(void *mem, unsigned int len)
{
mem = mem->tcbtio;
...
}
以下是我的结构定义:
struct psa {
char psastuff[540];
struct tcb *psatold;
char filler[4];
struct ascb *psaaold;
};
struct tcb {
struct prb *tcbrb;
char tcbstuff[8];
struct tiot *tcbtio;
};
struct tiot {
char tiocnjob[8];
char tiocpstn[8];
char tiocjstn[8];
};
我需要将它保留为void指针,因为我需要稍后将它转换为char和int。
答案 0 :(得分:3)
看起来你期望找到一个tcb
结构,从mem指向的地址开始,但代码的目的是模糊的,问题不明确。
如果确实如此,你可以试试这个:
mem = ((struct tcb *)mem)->tcbtio;
答案 1 :(得分:0)
您无法取消引用void
指针。如果你有一个void
指针,你可以这样想,编译器将如何知道它所持有的地址类型。通过mem = mem->tcbtio
做出多少补偿。
将您的功能修改为:
void hexdump(void *mem, unsigned int len)
{
struct tcbtio *mem2;
mem2 = ((struct tcb*) mem) -> tcbtio;
...
// Use mem2 later
}