auto类型都存放在栈上。
malloc函数在stdlib.h头文件中,如果看不到原型,返回值默认当作int对待。
Malloc ralloc realloc free前三个申请,后面一个释放
原则:谁申请谁释放,防止内存泄漏,malloc和free出现在同一个函数或者模块中
Malloc:
Void *malloc(size_t size)在堆上找一块连续的size字节的大小空间,返回一个空指针。(可以赋值给任何类型的指针)
void类型指针可以给任何指针赋值,任何指针也可以赋给他,但是c99种函数指针与void*赋值是未定义的
Void *calloc(size_t nmemb,size_t size)n块空间,一块空间多少字节
Void *realloc(void *ptr,size_t size)重新分配空间,新大小,ptr必须是malloc或者calloc返回的地址。自动增减或者从新找释放原来的。
※定义指针时不知指向最好先指向空,后面再赋值
malloc申请数组:申请连续空间,可变长空间(即将数据类型大小*个数)
※free空指针什么都不执行,但是也不会报错。注意free需要释放的是申请的首地址地址。
对于函数传递的指针在函数内申请空间的,注意要么传递二级指针,要么返回申请的地址达到释放,形参传递给实参只是拷贝了一份,拷贝的部分知道申请的地址在哪,不然原函数会不知释放哪里的内存。
※在free后马上对指针进行指向NULL操作,防止该指针变为野指针(野指针(dangling pointer)是指指向已经释放或者无效的内存地址的指针),该地址已经不是该程序所能掌控的地址,可能其他程序在该地址跑,而野指针依旧指向他,试图改变会造成程序崩溃的可能。!!!
如果还要继续使用该指针的话,最好指向NULL后重新分配空间,同时慎用realloc