目录
内存管理
malloc
free
使用
字符串存储申请堆区
自主输入个数,然后通过malloc在程序中申请空间,不用必须提前指定大小
内存溢出
内存泄漏
内存碎片
内存管理
函数名就是指向该函数的函数指针。
堆区是自低向高,栈区是自高向低,栈区申请空间越多,他就向下扩展,最多8m,超过就会崩掉:。
malloc
void *malloc(size_t size);
功能:申请堆区空间
参数:size:申请堆区空间的大小
返回值:返回获得空间的首地址,失败返回NULL
free
void free(void *ptr);
功能:释放堆区空间;
注意:1,free只能释放堆区空间
2,一个空间只能被free一次,多次free程序会崩溃
3,malloc需要和free搭配使用,如果只有malloc没有free会造成内存泄漏
使用
字符串存储申请堆区
堆区字符串复制需要用strcpy();
自主输入个数,然后通过malloc在程序中申请空间,不用必须提前指定大小
内存溢出
内存溢出也称为内存越界
int a[5] = {1,2,3,4,5};
a[5];
这就是内存越界
char a[32] = {"hello world"};
printf("%s",a);
如果字符串a后面的\n被人为取消,printf就会一直向后打印导致内存溢出。
内存泄漏
程序中malloc的空间没有被释放,会造成内存空间泄漏。
内存碎片
malloc申请的空间一定是连续的。由于频繁申请和释放导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间,因为该空间不连续,所以这样的空间就会被叫做内存碎片。尽量不要频繁的进行malloc空间。