⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 release.h

📁 内存管理系统
💻 H
字号:
void mm_release(void * p);//释放指针p指向的内存块

void mm_release(void *p)
{
	/*
	memState *temp;//,*temp1,*temp2;
	temp = head;
	while(temp!=NULL)
	{
		if(temp->state==0&&(&mem[temp->begin]==p))//要删除指针处有内容
		{
			if(temp->before!=NULL&&(temp->before->state==1))//如果要释放块前面的块是空则释放并与前面合并
			{
				temp->before->next = temp->next;
				if(temp->next!=NULL)
				{
					temp->next->before = temp->before;
				}
				temp->before->end = temp->end;
				temp = temp->next;
			}
			if(temp->next!=NULL&&temp->next->state==1)//如果要释放块后面是空则释放并与后面块合并
			{
				if(temp->before!=NULL)
				{
					temp->before->next = temp->next;
				    temp->next->before=temp->before;
					temp->before->end=temp->end;
				}
				else
				{
					temp->next=temp->next->next;
					//temp->before = temp->before->before;
				}
			}
			temp->state = 1;
		//	return 1;

		}
		else
		{
			temp = temp->next;
		}
		
	}*/
	memState * tmp = head;
	memState * tmp2; //用于得到tmp前面的那个节点
	memState * tmp3; //只是用做暂存一下而已,无奈之举

	while ( tmp != NULL )
	{
 	   if ( (tmp->state == 0) && ( &mem[tmp->begin] == p) )
	   {
		    //释放一块内存,块数减一
			count--;

			tmp2 = tmp->before; 
			if ( (tmp2 != NULL) && (tmp2->state == 1) )
			{   
				 tmp2->next = tmp->next;
				 tmp3 = tmp->next;
				 if(tmp3!=NULL)
					 tmp3->before = tmp2;
				 tmp2->end = tmp->end;
				 free( tmp );      
				 tmp = tmp2; 
			}

			tmp3 = tmp->next;    
			if ( (tmp3 != NULL) && (tmp3->state == 1) )
			{
			 tmp->next = tmp3->next;
			 tmp3->before = tmp;
			 tmp->end = tmp3->end;
			 free( tmp3 );    
			}

        
				tmp->state = 1;
				nextfit=head;
	   }
	   else
			tmp = tmp->next;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -