程序源代码:

//写文件两种方式(文本文件和二进制文件)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> //文本写文件
int writeWord(const char *path,const char *pword){
int ERRO_MSG = ;
if (path == NULL)
{
ERRO_MSG = ;
printf("path==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pword == NULL)
{
ERRO_MSG = ;
printf("pword==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
//定义文件指针
FILE *fpw=NULL;
//打开文件
fpw = fopen(path, "w");//w 打开只写文件,若文件存在,则文件长度清零,即文件内容会消失,若文件不存在则建立该文件
//判断文件是否打开成功
if (fpw==NULL)
{
ERRO_MSG = ;
printf("文件打开失败 fpw==NULL erro msg:%d\n", ERRO_MSG);
return ERRO_MSG;
}
//开始写文件
fputs(pword, fpw);
//关闭文件
if (fpw!=NULL)
{
fclose(fpw);
}
return ERRO_MSG;
} //文件读文件
char ** readtxt(const char *path)//二级指针做输出
{
int ERRO_MSG = ;
if (path==NULL)
{
ERRO_MSG = ;
printf("path==NULL erro msg:%d\n", ERRO_MSG);
//return ERRO_MSG;
}
//定义文件指针
FILE *pfr = NULL;
//打开文件
pfr = fopen(path, "r");
if (pfr==NULL)
{
ERRO_MSG = ;
printf("pfr==NULL erro msg:%d,文件路径:%s\n", ERRO_MSG, path);
//return ERRO_MSG;
}
//开始读文件
//1.定义文件缓存数组
char bufarr[] = { };
//2.0 获取文本具体行数
//2.1 定义临时变量
int index = ;
//2.0定义返回二维数组
char **resbuf = (char **)malloc(sizeof(char *)*);
//读文件
while (!feof(pfr)){//feof()如果文件结束,则返回非0值,否则返回0
memset(bufarr, , sizeof(char));
fgets(bufarr, , pfr);
char *bufstr1 = (char *)malloc(sizeof(char)*strlen(bufarr));
//拷贝字符串
strcpy(bufstr1, bufarr);
resbuf[index] = bufstr1;
index++;
//resbuf = (char **)realloc(resbuf, sizeof(char *)*(index + 2));
}
resbuf[index] = NULL;
return resbuf;
} void main(){ //定义文件路径
char *path = "E:\\Test\\CwordTest\\";//只适用于window
char *path1 = "E:/Test/CwordTest/a1.txt";
//writeWord(path1, "asfasdfasdgafdsgadf\r\n打倒日本帝国主义和所对符合大家的哟撒\r\ndsafgshfetgrhet");
char **pdata = NULL;
pdata=readtxt(path1);
int index = ;
if (pdata!=NULL)
{
while (pdata[index] != NULL){
printf("%s\n", pdata[index]);
//释放内存
free(pdata[index]);
pdata[index] = NULL;
index++;
}
free(pdata);
pdata = NULL; }
system("pause");
}

报错页面

错误解析:

这个错误是在释放字符串指针的时候报错,具体行数如图

错误原因:

通过对错误进行百度,我理解了这个错误的原因是,释放一个字符串指针,但是这个字符串指针被破坏了,举例说明:

char *str=(char *)malloc(sizeof(char)*10);//分配了10个字节大小的内存空间

strcpy(str,"1234567890");//字符串拷贝,字符串”1234567890“是11个字符,这个拷贝操作会破坏字符指针str,此时会拷贝11字节到str指向的内存空间里,超过了原来分配的10个字节大小的内存空间

如果这时候用free(str);释放内存就会报错  ---HEAP CORRUPTION DETECTED

错误产生原因:

这个错误产生的原因就是对strlen()这个函数理解的不到位,举例:

char bufarr[100] = "1234567890";
printf("%d\n", strlen(bufarr));

打印出10,但是如果你分配字符串应该分配11个,留一个字节给'\0'

而我上面就犯了这个错误

C语言错误: HEAP CORRUPTION DETECTED的更多相关文章

  1. heap corruption detected错误解决方法调试方法以及内存管理相关

    1.heap corruption detected http://vopit.blog.51cto.com/2400931/645980   heap corruption detected:aft ...

  2. C语言错误: CRT detected that the application wrote to memory after end of heap buffer

    CRT detected that the application wrote to memory after end of heap buffer 多是中间对其进行了一些操作,在程序结束处,释放内存 ...

  3. HEAP CORRUPTION DETECTED:after Normal block错误方法解决

    一:问题描述: 出现的问题如下: 二:问题产生的原因说明 该问题发生于操作堆内存的时候.产生该问题的原因是:你实际使用的内存大小超出了你实际申请的内存大小,在释放内存的时候就会发生该问题. 举个例子: ...

  4. 内存溢出(heap corruption detected:)

    今天又遇到了上次出现的bug,然后百度了一下,想起来这是内存溢出的毛病,故记录下来! 出现的问题就是这样: heap corruption detected: after normal block(# ...

  5. VC++ 报错:Heap corruption detected

    今天在写代码时,发现莫名其妙的错误: std::string strName = L“testtest”; char* pOutString = new char(len + 1); Decrypt( ...

  6. HEAP CORRUPTION DETECTED :after Normal block 错误

    http://blog.csdn.net/zhccl/article/details/7889590

  7. heap corruption detected VS2015 C语言 报错

    申请动态内存时,申请的单元数为n,可用下标为0~n-1 但实际使用时超过了该范围,就会报这个错

  8. HEAP CORRUPTION DETECTED

    发生主要是由于这个问题给写入超出预分配的空间,注意检查越界情况 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  9. [linux系统]XFS (vda3):Corruption detected.Unmount and run xfs_repair 简单解决办法

    今天kvm的centos系统,rm -rf时报错,具体如下: rm: cannot remove ‘log-0/case1/log_net’: Input/output errorrm: cannot ...

随机推荐

  1. C++ RTTI

    一.定义:RTTI:Run Time Type Identification ,运行时类型识别:指程序能够使用基类的指针或引用来检索其所指对象的实际派生类型.二.使用方式:C++中有两个操作符提供RT ...

  2. android lsitview setOnItemLongClickListener 无效或不执行

    今天遇到了lsitview的setOnItemLongClickListener的方法不执行,我是在listview中的每一个ITEM都存放了不同的布局:给整个item布局设置了点击事件onClick ...

  3. iptables基本操作

    一.基本操作 #启动防火墙 service iptables start #停止防火墙 service iptables stop #重启防火墙 service iptables restart #查 ...

  4. iOS程序启动的过程及原理

    iOS程序启动的过程及原理 文字部分 先执行main函数,main内部会调用UIApplicationMain函数 UIApplicationMain函数里面做了什么事情??? 1> 创建UIA ...

  5. iOS背景模糊效果3中方法总结

    1.首先得把界面转化成图片,给uiview加一个类目如下: #import "UIView+Screen.h" @implementation UIView (Screen) // ...

  6. OC的项目网址(自己编写的项目)

    因为便于方便快速打开自己曾经写过的项目,所以就把链接保存在博客里了.一点击就能找到. <附注学习github排版:https://github.com/yangxuanxc/guide?file ...

  7. c# 进程间通信 IPC

    最近在调试一个算法,想通过改变算法的参数看看结果有什么变化. 碰到一个麻烦的事情是,从磁盘加载.构建数据需要15分钟.这就比较讨厌了,也就是说我每次调一个参数前都要等15分钟启动时间? 于是我就想,能 ...

  8. mongodb--java操作

    一.mongodb客户端 mongodb提供诸多语言的客户端,也包括java的客户端.通过这些客户端,我们可以很方便地使用编写代码的方式对mongodb进行操作.这里使用java客户端进行示例.使用j ...

  9. HashMap与TreeMap的区别

    首先描述下什么是Map. 在数组中我们是通过数组的下标来对其内容进行索引的,而在Map中我们是通过对象对对象进行索引的,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平常说的键值对. ...

  10. 启动rabbitmq web管理后台插件

    安装完rabbitmq server之后,访问http://server_ip:15672/  无法打开网页, 通过netstat -ano |grep 15672 查看此端口号并没有开启 需要启用 ...