我想使指針數組中的最後一個元素爲NULL,但我有一些問題。我的代碼如下:如何使指針指針NULL
kernel->availMsgEnvQueue = (MsgEnv *)malloc(AVAIL_MSG_ENV_SIZE * sizeof(MsgEnv));
int i;
for(i=0; i<AVAIL_MSG_ENV_SIZE-1; i++)
{
kernel->availMsgEnvQueue[i].nextMsgEnv = &(kernel->availMsgEnvQueue[i+1]);
kernel->availMsgEnvQueue[i].msg = (Msg)malloc(MSG_SIZE * sizeof(char));
}
kernel->availMsgEnvQueue[19].nextMsgEnv = NULL;
哪裏AVAIL_MSG_ENV_SIZE是20.我試圖讓20元一空,但是這是行不通的,因爲我得到一個分段錯誤,當我運行下面的測試:
while (kernel->availMsgEnvQueue->nextMsgEnv)
{
printf ("%d\n", x);
temp = temp->nextMsgEnv;
x++;
}
X一直計數到20,然後崩潰。請協助。
編輯: Apparantly在列表的最後一個元素被髮送到零。我不知道這段代碼是否會將隊列中的最後一個消息信封出隊:
MsgEnv * k_request_msg_env(){
MsgEnv * env = kernel->availMsgEnvQueue->nextMsgEnv;
if(!env){
printf ("This one was null");
PCB * pcb = kernel->current_process;
if(pcb->state != IS_IPROCESS){
printf ("Process %d is being blocked on request",pcb->id);
pcb->state = BLOCK_ON_ENV;
enPQ(kernel->bq, pcb, pcb->priority);
k_process_switch();
}
}else{
kernel->availMsgEnvQueue->nextMsgEnv = kernel->availMsgEnvQueue->nextMsgEnv->nextMsgEnv;
env->nextMsgEnv = NULL;
//clear message
memset(env->msg, 0, MSG_SIZE);
}
return env;
}
謝謝!
'爲(I = 0; I
而且,當然'而(TEMP-的> nextMsgEnv){' –
一些雜散註釋:(1)應該使用'AVAIL_MSG_ENV_SIZE - 1'而不是'19',前者是你的意思; (2)是'Msg'定義爲指針類型?如果不是,你應該把'malloc'的返回值賦給'Msg *',而不是'Msg'; (3)你如何初始化'temp'? (我假設'temp = kernel-> availMsgEnvQueue [0]'?) – ruakh