数据结构中关于 malloc以及free的问题

关于mallco以及free的问题:

数据结构严蔚敏 队列基本操作 DeQueue函数

Status DeQueue(LinkQueue & Q, QElemType & e)
{//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK
	if (Q.front == Q.rear)return ERROR;
	QueuePtr p = (QueuePtr)malloc(sizeof(QNode));   //此处为何要给p申请空间?
	p = Q.front->next;								//Q.front->next已经申请过内存空间
	e = p->data;									//p = Q.front->next之后
	Q.front->next = p->next;						//free(p)free的是哪一块?
	if (Q.rear == p)Q.rear = Q.front;				//测试后发现释放的是Q.front->next所指的内存空间
	free(p);
	return OK;
}

该函数需要实现删除元素的功能,作者使用了一个辅助变量,并给该变量申请了内存空间
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
然后又给该变量赋值
p = Q.front->next;
最后free(p)实际上free的是队列中队头元素的内存空间,但是p申请的内存空间却没有free掉
该函数不需要malloc语句一样可以实现功能
此处为p申请内存空间是否存在不妥?

free(p),释放的是指针p所指内存地址的空间,释放空间大小与malloc中申请的一致
倘若对p申请内存空间后,又将p指向别的地址,此时如何释放开始申请的内存空间?

你可能感兴趣的:(数据结构严蔚敏)