程序源代码:

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

#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. Google可能会用苹果的Swift 为什么?

    Google可能会用苹果的Swift 为什么? 2014 年夏天,苹果在 WWDC 大会上宣布了全新的程序语言 Swift,主要用来开发 iOS 与 OSX 应用. 去年年底,苹果将 Swift 开源 ...

  2. Java或Android开发中,去掉块注释格式化后每行出现的星号(*)的解决方案。(Eclipse)

    找到子项,在 Window->Prefrences->Java->Code Style->Formatter,点击New新建 Active profile,然后在Comment ...

  3. Masonry第三方代码约束

    #import "RootViewController.h" #import "Masonry.h" @interface RootViewController ...

  4. MyBatis入门(六)---mybatis与spring的整合

    一.整合需要 1.1.方法 上一章中的数据 需要spring通过单例方式管理SqlSessionFactory spring和mybatis整合生成代理对象,使用SqlSessionFactory创建 ...

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

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

  6. 忙碌的Nova君 (活动安排问题、贪心算法)

    题目描述 理论上,Nova君是个大闲人,但每天还是有一大堆事要干,大作业啦,创新杯啦,游戏啦,出题坑人啦,balabala......然而精力有限,Nova君同一时间只能做一件事,并不能一心二用.假设 ...

  7. dig与dns基本理论——解析和缓存

    DNS(Domain Name System,域名系统)也许是我们在网络中最常用到的服务,它把容易记住的域名,如 www.google.com 翻译成人类不易记住的IP地址,如 173.194.127 ...

  8. 敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则

    第10章 LSP:Liskov替换原则    Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type). 10.1 违反LSP的情形 10.1.1 简单例子 对L ...

  9. javascript 如何访问 action或者controller 传给 jsp 页面的值

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  10. Web Service中的几个重要术语

    WSDL:web service definition language 直译:WebService定义语言 1.对应一种该类型的文件.WSDL 2.定义了Web Service的服务器与客户端应用交 ...