C - nullspace中非零地址的含义

时间:2014-12-03 09:41:25

标签: c malloc

这是一个链表队列实现。

这是我的程序

int  size(QueuePtr q)
{   
    QueuePtr temp = q->next;
    int size = 0;

    while(temp)
    {
        size++;
        temp = temp->next;
    }

    return size;
}

其中QueuePtr的定义如下

struct QueueElement 
{                       
    struct QueueElement *next;              
    int prio;                               
    DataPtr data;                       
}; 

typedef struct QueueElement *QueuePtr;

当地址指向nullspace但是isnt为null时,我的程序崩溃了!

Bad arg exception

  temp = 0xf00000000000000  (while is not aborted since temp != 0)
  temp = temp->next         (this line generates the exception)

我的调试器说我有空闲(----)没有被malloced的内存。但这对我没什么帮助 -

这个地址是什么意思?我可以简单地改变我的while(某事)陈述吗?

1 个答案:

答案 0 :(得分:2)

如果你没有将next指针初始化为0,那么它们可以包含任何,包括无效指针。

在Debug构建中,未初始化的内存通常具有可识别的模式,如0xfeeefeee0xdeadbeef,因此可以将其识别为未初始化。

要解决此问题,您应该在创建节点时明确地将下一个指针设置为0:

QueuePtr createNode(int prio, DataPtr data){
    QueuePtr node = (QueuePtr)malloc(sizeof(struct QueueElement));
    node->next = null;
    node->prio = prio;
    node-> data = data;
    return node;
}