swap字符串浅谈
来源:互联网 发布:javascript模式 在线 编辑:程序博客网 时间:2024/06/05 00:47
(大山中学程序设计I作业)
“啦啦啦啦啦啦音乐真好听”
“啊我这道题怎么Memory Check Failed了,帮我看看呗”
“啊?你又对内存干了什么坏事?”
“你自己看!我感觉我代码没有错啊!”
上代码:
void swap(char *a,char *b){ char *c=0; int len=max(strlen(a),strlen(b)); c=(char *)malloc(sizeof(char)*len); strcpy(c,a),strcpy(a,b),strcpy(b,c); free(c);}
好了,这段代码就是Memory Check Failed的黑幕所在。
用Visual Studio 2017 Debug模式断点调试发现free时会报错,报错内容如下:
翻译一下:
侦测到堆腐蚀(emmmm我个人觉得应该用leak好一点):C运行库侦测到程序对程序缓冲堆区末尾后的内存进行写入。
大白话就是:你内存操作越界了,你free了原本不是你malloc的内存。
为什么????
好既然已经知道是内存越界了,那我们来分析一下为什么会导致内存越界。
仅分析指针c,给定字符串”karkisthemosthandsomeman\0”。为什么会有\0是因为这是由scanf或其他方式读入的C风格字符串。strlen该字符串返回的长度length=24,于是申请长度为24*sizeof(char)的内存空间,然后写入的时候,把\0也会写进去。
好,越界了。
解决方案也很简单,只需要将
改成
就可以解决问题了。
写程序的时候管理内存是每个C程序员的痛啊……
2017.12.25
Merry Christmas!
阅读全文
0 0
- swap字符串浅谈
- swap分区管理浅谈
- 浅谈字符串
- 浅谈字符串
- string字符串的交换-swap()
- 浅谈字符串长度
- 浅谈C#之字符串
- 浅谈java字符串
- 浅谈Java字符串
- 浅谈 Java 字符串
- 浅谈 Java 字符串
- 浅谈 java 字符串
- 浅谈php字符串
- 浅谈数组及字符串
- swift String 字符串浅谈
- 浅谈字符串比较 杨雷
- 列表浅谈,字符串补充
- 浅谈字符串常量
- 面试小故事
- 【MySQL】20个经典面试题
- JAVAWEB第七天java基础加强(二)
- Android进阶——借助简单便捷的ActivityLifecycleCallbacks实现全周期监听Activity
- 利用Jenkins玩转Android自动打包发包
- swap字符串浅谈
- 第八章习题
- 做一个随手做笔记的人
- 算法第4版(完整中文版)
- apk反编译和AS基本混淆规则
- JavaEE——JSP标签
- 测试软件_中英文对照
- 3.6 let
- android studio删除依赖后添加依赖报错Error:Project with path 'XXXX' could not be found解决办法