typedef struct Oft{
int mode;
int refCount;
} OFT;
typedef struct proc{
struct proc *next;
int uss, usp;
int pid; // add pid for identify the proc
int status; // status = FREE|READY|RUNNING|SLEEP|ZOMBIE
int ppid; // parent pid
OFT *fd[10];
int kstack[1024]; // per proc stack area
}PROC;
如何初始化和使用我的* fd [10]变量?
假设我有
PROC *p;
这是初始化其* fd [10]的正确方法吗?
for(i = 0; i < 10; i++)
{
p->fd[i] = (OFT *) malloc (sizeof(OFT));
(*p->fd)[0] = Some OFT object?
}
为什么当我进行以下检查时,p-&gt; fd [i]总是等于null?
if (p->fd[i] == NULL)
//Do sometiong
答案 0 :(得分:2)
p->fd[i] = malloc(sizeof(OFT));
是正确的,只要你通过使用malloc()
或指向一些PROC变量为p指向空间。请注意,您不需要强制转换,因为malloc()
会返回一个void *
,它会自动转换为任何类型的指针。但是,您应该检查malloc()
是否返回NULL
。
(*p->fd)[0]
错误,会导致编译错误。如果你有一个名为myoft的OFT对象;你可以像使用malloc一样分配它;当然,因为fd [x]是一个指针,你想拥有该对象的地址:
p->fd[x] = &myoft;
如果您想访问其中一个OFT的某个组件,您可以使用
p->fd[x]->refCount++;
我无法回答最后一个问题,为什么if (p->fd[i] == NULL)
始终为真,除非您提供完整的代码示例。