什么是C语言中内存溢出?关于malloc函数的~
2个回答
展开全部
malloc是C语言的动态内存分配函数,声明与malloc.h。由于stdlib.h中引用了malloc.h,所以在代码中引用malloc.h或stdlib.h均可。声明形式为
void * malloc(int size);
功能为申请一段长度为size字节的内存,并将内存的首地址返回,该返回值一般保存在指针变量中。后续对指针按照偏移量访问,可以实现访问对应元素的效果。
而在C语言中,访问指针时,并不会对偏移量是否合法做判断,这样在编程不严谨甚至错误时,就有可能访问超出合法范围的元素。
比如申请了100个字节的空间,却访问了第101个字节,这种超出合法范围的访问就称为内存溢出。
由于内存是动态分配的,所以无法预知溢出部分内存是何种作用,所以内存溢出会导致不可预知的后果,可能是某个运算出错,甚至整个程序崩溃,同样也可能出现完全没有影响。
由于内存溢出的不确定性,现象也多种多样,导致内存溢出后,程序问题点定位和修改均很繁琐,所以最好的方法是在代码构建阶段着重注意内存访问的限制,确保不会出现溢出。
void * malloc(int size);
功能为申请一段长度为size字节的内存,并将内存的首地址返回,该返回值一般保存在指针变量中。后续对指针按照偏移量访问,可以实现访问对应元素的效果。
而在C语言中,访问指针时,并不会对偏移量是否合法做判断,这样在编程不严谨甚至错误时,就有可能访问超出合法范围的元素。
比如申请了100个字节的空间,却访问了第101个字节,这种超出合法范围的访问就称为内存溢出。
由于内存是动态分配的,所以无法预知溢出部分内存是何种作用,所以内存溢出会导致不可预知的后果,可能是某个运算出错,甚至整个程序崩溃,同样也可能出现完全没有影响。
由于内存溢出的不确定性,现象也多种多样,导致内存溢出后,程序问题点定位和修改均很繁琐,所以最好的方法是在代码构建阶段着重注意内存访问的限制,确保不会出现溢出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询