1.内存管理:
1.malloc
void *malloc(size_t size);
功能:
申请堆区空间
参数:
size:申请堆区空间的大小
返回值:
返回获得的空间的首地址
失败返回NULL
2.free
void free(void *ptr);
功能:
释放堆区空间
注意:
1.free只能释放堆区空间
2.一个空间只能被free一次,多次free程序会崩溃
3.malloc需要和free搭配使用,如果只有malloc没有free会内存泄露
2.内存溢出:
内存溢出也称为内存越界
3.内存泄露:
程序中malloc的空间没有被释放
4.内存碎片:
由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片。
5.链表的增删改查:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
typedef int datetype;
typedef struct node
{
datetype date;
struct node *pnext;
}linknode;
linknode *creatlinklist(void)
{
linknode *ptmpnode = NULL;
ptmpnode = malloc(sizeof(linknode));
if(NULL == ptmpnode)
{
return NULL;
}
ptmpnode->pnext = NULL;
return ptmpnode;
}
int insertheadlinklist(linknode *phead, datetype tmpdate)
{
linknode *ptmpnode = NULL;
ptmpnode = malloc(sizeof(linknode));
if(NULL == ptmpnode)
{
return -1;
}
ptmpnode->date = tmpdate;
ptmpnode->pnext = phead->pnext;
phead->pnext = ptmpnode;
return 0;
}
int showlinklist(linknode *phead)
{
linknode * ptmpnode = NULL;
ptmpnode = phead->pnext;
while(ptmpnode != NULL)
{
printf("% d",ptmpnode->date);
ptmpnode = ptmpnode->pnext;
}
printf("\n");
return 0;
}
int replacelinklist(linknode *phead,datetype olddate,datetype newdate)
{
linknode *ptmpnode = NULL;
ptmpnode = phead->pnext;
while(ptmpnode != NULL)
{
if( ptmpnode->date == olddate)
{
ptmpnode->date = newdate;
}
ptmpnode = ptmpnode->pnext;
}
return 0;
}
int deletelinklist(linknode *phead,datetype tmpdate)
{
linknode *pprenode = NULL;
linknode *ptmpnode = NULL;
ptmpnode = phead->pnext;
pprenode = phead;
while(ptmpnode != NULL)
{
if(ptmpnode->date == tmpdate)
{
pprenode->pnext = ptmpnode->pnext;
free(ptmpnode);
ptmpnode = pprenode->pnext;
}
else
{
pprenode = pprenode->pnext;
ptmpnode = ptmpnode->pnext;
}
}
}
int destroylinklist(linknode **phead)
{
linknode *ptmpnode = NULL;
linknode *pfreenode = NULL;
ptmpnode = pfreenode = *phead;
while(ptmpnode != NULL)
{
ptmpnode = ptmpnode->pnext;
free(pfreenode);
pfreenode = ptmpnode;
}
*phead = NULL;
return 0;
}
int main(void)
{
linknode *linklist = NULL;
linklist = creatlinklist();
insertheadlinklist(linklist,1);
insertheadlinklist(linklist,2);
insertheadlinklist(linklist,3);
insertheadlinklist(linklist,4);
insertheadlinklist(linklist,5);
showlinklist(linklist);
replacelinklist(linklist,5,66);
replacelinklist(linklist,1,88);
showlinklist(linklist);
deletelinklist(linklist,66);
showlinklist(linklist);
destroylinklist(&linklist);
return 0;
}