int RemoveFromQueue(Queue a)
{
int r=0;
printf("test0\n");
if(a->First!=NULL)
{
printf("test1\n");
a->Length=a->Length-1;
r=a->First->DATA;
NodeQ tmp=a->First;
printf("test2\n");
if(tmp==a->Last)
{
a->Last=NULL;
}
printf("test3\n");
a->First=a->First->next_Node;
printf("test4\n");
free(tmp);
printf("test5\n");
}
else
{
return NULL;
}
return r;
}
队列代码:
struct NodeQ_s{
int DATA;
struct NodeQ_s *next_Node;
};
struct Queue_s{
int Length;
NodeQ First;
NodeQ Last;
};
.h文件:
typedef struct NodeQ_s *NodeQ;
typedef struct Queue_s *Queue;
插入功能:
void InsertToQueue(Queue a,int b)
{
if(a->First==NULL)
{
a->Length=1;
a->First=malloc(sizeof(*(a->First)));
a->First->DATA=b;
a->First->next_Node=NULL;
}
else
{
a->Length=a->Length+1;
NodeQ tmp=malloc(sizeof((*tmp)));
tmp->DATA=b;
if(a->Last==NULL)
{
a->Last=tmp;
a->First->next_Node=a->Last;
}
else
{
a->Last->next_Node=tmp;
a->Last=a->Last->next_Node;
a->Last->next_Node=NULL;
}
}
}
你能告诉我我做错了什么或者为什么会崩溃吗?
答案 0 :(得分:0)
它正在崩溃,因为你试图释放那些甚至不存在的动态内存!
free
获取指向它应该解除分配的内存位置的指针,并且您将NodeQ
对象传递给它。你看到问题出在哪里了?
如果a->First
是一个想要释放的malloc指针,那么我想你想指向它,而不是像你那样创建它的副本。像这样:
NodeQ *tmp = a->First;
然后你可以释放它。
如果a->First
不是指向malloc指针,那么你就不会有免费电话。
看到你的结构定义后,First
甚至不是一个指针!你不能为它调用malloc。
或者你可以使用这样的解除引用操作符来获取存储在那里的内容:*malloc
当你解除它时,获取它的地址,如下所示:free(&a->First)
< / p>