这是一个链表队列实现。
这是我的程序
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(某事)陈述吗?
答案 0 :(得分:2)
如果你没有将next
指针初始化为0,那么它们可以包含任何,包括无效指针。
在Debug构建中,未初始化的内存通常具有可识别的模式,如0xfeeefeee
或0xdeadbeef
,因此可以将其识别为未初始化。
要解决此问题,您应该在创建节点时明确地将下一个指针设置为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;
}