c语言中出现内存错误的常见案例.pdfVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言中出现内存错误的常见案例,c语言项目案例分析,c语言内存分配,c语言课程设计案例,c语言内存管理,c语言动态内存分配,c语言申请内存,c语言内存模型,c语言案例,c语言释放内存

c c cc 语言中出现内存错误的常见案例: 大家好,最近一直在学习c/c++,发现进行定期的总结很有必要,故发帖希 望能够征集c/c++中常见的错误分析及解决方案,希望与一些志同道合的朋友共 同学习,在此,我先抛砖引玉,分析一下常见的内存错误: 1) 1)数组溢出。 11)) 如: void main() { int a[5]; a[5] = 8; printf(%d\n,a[5]); //数组是取不到a[5]的 } 对于初学者来说经常会犯这样的错误,一定要记住 inta[5]是从a[0]到a[4] 的,这一点我就不多说了,大家都知道的,呵呵。 2) ( ) 2) ( ) 22))程序中存在野指针((即未初始化的指针))。 例如: void fn(int data) { int *p2; *p2 = data; ... } 在未对指针初始化或者附初值(地址)的情况下,就没有对其分配空间,这种 错误比较明显,但是大家一定得养成一个良好的习惯,定义变量的时候记得进行 初始化。 3) 3)在函数调用的时候没有注意到变量的生 33)) 存期 看下面例子: #includestdio.h #includemalloc.h void int_malloc(int *); void main() { int i, *ip = NULL; for(i = 0; i 10; i++) { printf(%-4d,*(ip+i)); } printf(\n); } void int_malloc(int *ip) { int i; ip = (int *)malloc(sizeof(int)*10); for(i = 0; i 10; i++) { *(ip+i) = i; } } 开始是这样分析的: 作者的意图是在子函数中动态分配内存空间,在主函数中输出,这个时 候你就得注意陷阱了,原因是子函数运行完了刚分配的空间也就释放了,即使你 将将动态数组的首地址传回给main()函数也无济于事,我东西都不存在了你还 指望干什么?在写程序的过程中一定切记要注意变量的生存期(就是它什么时候 存在,什么时候消亡)。 这样分析似乎并不正确,无法在main()函数中输出动态数组的原因并 不是字函数完了内存就释放了,而是在参数中是无法将动态数组的首地址传回 main()的,只要我不释放,那刚申请的内存空间就不会自动释放,只有遇到free() 的时候才释放,另外,通过返回值是可以做到在主函数里面输出的,也就是这样 的形式 int *fn(int *m1,int *m2)是可以将r的首地址传回main并且可以成功 输出!请大家不要受我上面的错误分析的影响! 4) 4) 发生内存泄露 44)) 引起内存泄露主要是因为在分配内存没有释放或者读入文件后没有关 闭,所以说习惯是很重要的,还有一点值得提醒一下,一定不要打开和关闭文件 (fopen()和fclose放在循环里面),过多的使用free()和fclose可能回引起内 存错误。 5)常量的修改: char *p1 = abcde; char *p2 = 12345; strcpy(p1,p2); 一般情况下解释有两种原因:未对p1分配内存,它指向的只是一个常量字符 串,其值是不能被修改的! 引起内存错误的原因还有很多,但是我自己目前就遇到这些。我真诚的 希望大家能够互相交流,互相学习,将自己的错误经验贴上来,两个月后结贴!

文档评论(0)

docindpp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档