char *k1;

k1 = (char *) malloc(4*sizeof(char));

v1 = (char *) malloc(4*sizeof(char)); 
strcpy(k1,"abcd");

free(k1);

在linux下不会报错,但是在VC++环境会报错:HEAP CORRUPTION DETECTED

出现这个错误的原因一般都是操作new申请的内存溢出,因为在VC中,如果用malloc动态分配一段内存,操作的时候改变了该部分的大小,在free时就会出错.比如说上面
这段代码就会出错,因为申请了一个size为4的内存,但是strcpy过去了一个size为5的字符串,因此破坏了这个指针,运行debug版本的时候就会出现先前的错误,但是在release版本中,溢出一个字节的内存很有可能是没有错误的,然后潜在的隐患是肯定存在的,因此,我们在debug遇到这样的错误时候一定要仔细检查对malloc出的指针的操作.

strcpy(s1,s2);strcpy函数的意思是:把字符串s2中的内容copy到s1中,连字符串结束标志也一起copy.
这样s1在内存中的存放为:ch\0;

修改正确的代码:

char *k1;

k1 = (char *) malloc(5*sizeof(char));

v1 = (char *) malloc(5*sizeof(char)); 
strcpy(k1,"abcd");

free(k1);

进一步分析一下strcpy函数的源代码,代码如下:

char *strcpy(char *strDestination, const char *strSource)

  {

  assert(strDestination && strSource);

  char *strD=strDestination;

  while ((*strDestination++=*strSource++)!='\0')

  NULL;

  return strD;

  }

最重要一条语句为:while ((*strDestination++=*strSource++)!='\0') ,意思是先将第二参数当前指针所指内容赋值给第一个参数当前指针所指空间,直到第二参数当前指针所指内容为'\0',将'\0'赋值给第一个参数后结束,因为第一个参数当前指针也是不断自加的,跟第一个参数所具有的存储空间的大小没有关系,他们会一直赋值,超过第一参数存储空间也没有关系,直到第二参数遇到'\0'为止。

参考:heap corruption detected

http://blog.csdn.net/maintyb011/article/details/6562715

C语言Free时报错HEAP CORRUPTION DETECTED相关推荐

  1. C语言错误: HEAP CORRUPTION DETECTED

    程序源代码: //写文件两种方式(文本文件和二进制文件)#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl ...

  2. C++debug调试出现heap corruption detected: after normal block 可能的原因

    最近在刷C++题目的代码,在刷题过程中出现了 heap corruption detected: after normal block 这种错误出现的概率应该还是蛮高的: 这是典型的内存溢出错误,常在 ...

  3. 由HEAP Corruption DETECTED查到的

    我从CWinThread类上派生了一个类CGameSocket,从CGameSocket类上派生了CSocketThread类 我new CSocketThread类,然后在退出时delete thi ...

  4. 当使用makemigrations时报错No changes detected

    在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码. 但有时执行python manage.py makemigration ...

  5. Apex运行时报错提示“easy anti-cheat”“Game Security Violation Detected(#0000000D)[xxx.exe]“ 问题解决方案

    Apex运行时报错提示"Game Security Violation Detected(#0000000D)[xxx.exe]" 问题解决方案 1.问题分析 某天加载游戏突然失败 ...

  6. R语言离线安装stringi时报错icudt61l.zip无法从URL下载

    在Linux环境离线状态下安装stringi包时报错icudt61l.zip无法从URL下载导致: ERROR: configuration failed for package 'stringi' ...

  7. c语言常考易错知识点,C语言中易错点知识点拾遗

    C语言中易错点知识点拾遗 1. 首先,feof()是文件结束检测函数,如果没有结束,返回值是 0,结束了是 1 由于 feof(fp)返回 0 才 是没有结束,所以通常写成 while(!feof(f ...

  8. 【Cmake】执行cmake命令时报错:No XSLT processor found

    一.问题描述 在ubuntu中,在生成Doc(文档)中,执行cmake命令时报错:No XSLT processor found 二.原因查找 google该错误信息,原因是确实ubuntu中没有安装 ...

  9. mysql pool not open_安装 MariaDb 时报错:Could not open mysql.plugin table

    安装 MariaDb 时报错 2015-12-10 10:52:31 13f4 InnoDB: Warning: Using innodb_additional_mem_pool_size is DE ...

最新文章

  1. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)
  2. CMU赵越:关于数据挖掘的分享!
  3. R语言构建xgboost模型:使用xgb.DMatrix保存、加载数据集、使用getinfo函数抽取xgb.DMatrix结构中的数据
  4. 【刷算法】LeetCode.278-第一个错误的版本
  5. Oracle数据库的性能调整
  6. 【网络安全】Metasploit 生成的 Shellcode 的导入函数解析以及执行流程分析(1)
  7. 如何下载centos最小的镜像文件
  8. 多人姿态识别框架——AlphaPose
  9. bower使用中遇到的问题
  10. 最大流学习笔记(4)-推送重贴标签算法二
  11. Citrix XenApp/XenDesktop 7.15 LTSR发布
  12. 如何用ps扣字体_PS如何抠文字 Photoshop抠字教程
  13. linux网桥内核实现分析,Linux网桥实现分析
  14. 注册Google账号
  15. 【概率论与数理统计(研究生课程)】知识点总结4(随机变量的数字特征)
  16. 离散复习资料之一(Warshall算法)
  17. splice,splite,slice的区别
  18. Multimedia Standards Introduction——专业术语
  19. 大数据-计算引擎:MapReduce、TEZ、Spark【Hive可选用的三大计算引擎】
  20. leetcode之美团公司算法

热门文章

  1. 字符串去重、统计不同字符种类数问题
  2. 深度学习:Opencv的BlobfromImage如何工作
  3. Python3 pathlib让编程更美好
  4. Linux那些事儿之我是Sysfs(7)dentry与inode
  5. 服务器维护怎么联系抖音客服,如何联系抖音客服?
  6. python库缺少pkg_resource_ImportError: No module named pkg_resources解决方案
  7. ikbc机械键盘打字出现重复_抖音开啤酒小姐姐同款面具,ikbc白无垢樱花机械键盘开箱体验...
  8. 【论文速读】基于图像的伪激光雷达三维目标检测
  9. configure_file路径疑惑
  10. 在Ubuntu 14.04 64bit上安装配置sublime text 3(Build 3083)