什么是C语言中内存溢出?关于malloc函数的~

2024-11-28 19:22:24
推荐回答(2个)
回答(1):

malloc()函数开辟的内存空间系统是不会自动释放的,与普通定义的数据变量不一样,所以得在程序里,手动写free()函数释放内存空间,
如果不写free函数释放malloc()函数开辟的内存空间的话,系统中无效的内存空间会越积越多,到达一定数量后内存就不够用了,这就是所说的内存溢出。

回答(2):

malloc是C语言的动态内存分配函数,声明与malloc.h。由于stdlib.h中引用了malloc.h,所以在代码中引用malloc.h或stdlib.h均可。声明形式为
void * malloc(int size);
功能为申请一段长度为size字节的内存,并将内存的首地址返回,该返回值一般保存在指针变量中。后续对指针按照偏移量访问,可以实现访问对应元素的效果。
而在C语言中,访问指针时,并不会对偏移量是否合法做判断,这样在编程不严谨甚至错误时,就有可能访问超出合法范围的元素。
比如申请了100个字节的空间,却访问了第101个字节,这种超出合法范围的访问就称为内存溢出。
由于内存是动态分配的,所以无法预知溢出部分内存是何种作用,所以内存溢出会导致不可预知的后果,可能是某个运算出错,甚至整个程序崩溃,同样也可能出现完全没有影响。
由于内存溢出的不确定性,现象也多种多样,导致内存溢出后,程序问题点定位和修改均很繁琐,所以最好的方法是在代码构建阶段着重注意内存访问的限制,确保不会出现溢出。