内存泄漏是指在堆上分配的内存没有被释放,从而失去对其控制。这样会造成程序能使用的内存越来越少,导致系统运行速度减慢,严重情况会使程序当掉。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。
*p = (char *)malloc(num);//在堆上分配内存。
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
函数退出后,str的内存被释放,程序失去了对在堆分配的管理手段,从而造成内存泄漏。
改为:
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
free(str);
}
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
free(str);
}
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。
char szTemp[1];
memcpy( szTemp, 0x00, sizeof(char)*99999999999999999999999999 );
memcpy( szTemp, 0x00, sizeof(char)*99999999999999999999999999 );