如何使指针指针为NULL

时间:2011-11-30 02:56:31

标签: c++ c unix pointers

我试图使指针数组中的最后一个元素为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个元素设为null但这不起作用,因为我在运行以下测试时遇到分段错误:

while (kernel->availMsgEnvQueue->nextMsgEnv) 
     {
    printf ("%d\n", x);
    temp = temp->nextMsgEnv;
    x++;
}

X一路计数到20,然后崩溃。请协助。


编辑:显然,列表中的最后一个元素被发送到零。我无法弄清楚这段代码是否会从队列::

中将最后一个消息信封出列
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;
}

谢谢!

1 个答案:

答案 0 :(得分:2)

您的循环测试不会改变:

while (kernel->availMsgEnvQueue->nextMsgEnv) {

所以它迭代了20次,并继续......

也许你是这个意思?

while (kernel->availMsgEnvQueue[x].nextMsgEnv) {