C语言错误: HEAP CORRUPTION DETECTED
程序源代码:
//写文件两种方式(文本文件和二进制文件) #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的更多相关文章
- heap corruption detected错误解决方法调试方法以及内存管理相关
		1.heap corruption detected http://vopit.blog.51cto.com/2400931/645980 heap corruption detected:aft ... 
- 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 多是中间对其进行了一些操作,在程序结束处,释放内存 ... 
- HEAP CORRUPTION DETECTED:after Normal block错误方法解决
		一:问题描述: 出现的问题如下: 二:问题产生的原因说明 该问题发生于操作堆内存的时候.产生该问题的原因是:你实际使用的内存大小超出了你实际申请的内存大小,在释放内存的时候就会发生该问题. 举个例子: ... 
- 内存溢出(heap corruption detected:)
		今天又遇到了上次出现的bug,然后百度了一下,想起来这是内存溢出的毛病,故记录下来! 出现的问题就是这样: heap corruption detected: after normal block(# ... 
- VC++ 报错:Heap corruption detected
		今天在写代码时,发现莫名其妙的错误: std::string strName = L“testtest”; char* pOutString = new char(len + 1); Decrypt( ... 
- HEAP CORRUPTION DETECTED :after Normal block 错误
		http://blog.csdn.net/zhccl/article/details/7889590 
- heap corruption detected VS2015 C语言 报错
		申请动态内存时,申请的单元数为n,可用下标为0~n-1 但实际使用时超过了该范围,就会报这个错 
- HEAP CORRUPTION DETECTED
		发生主要是由于这个问题给写入超出预分配的空间,注意检查越界情况 版权声明:本文博客原创文章,博客,未经同意,不得转载. 
- [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 ... 
随机推荐
- iOS开发工程师面试知识点汇总
			1.KVO实现原理 2.内存管理 3.Runtime 4.GCD 5.Block 6.响应者链 7.@peoperty属性特性 8.单元格cell加载图片处理 
- iOS内存管理(二)之深拷贝和浅拷贝
			对象拷贝(复制对象) 1.复制对象顾名思义,复制一个对象作为副本,它会开辟一块新的一块内存(堆内存)来存储副本对象,就像复制文件一样.即源对象和副本对象是两块不同的内存区域. 2.NSObject ... 
- LeetCode 4 Median of Two Sorted Arrays (两个数组的mid值)
			题目来源:https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 an ... 
- Swift语言实战晋级
			Swift语言实战晋级基本信息作者: 老镇 丛书名: 爱上Swift出版社:人民邮电出版社ISBN:9787115378804上架时间:2014-12-26出版日期:2015 年1月开本:16开页码: ... 
- MySQL之ALTER
			1:删除列 ALTER TABLE [表名字] DROP [列名称] 2:增加列 ALTER TABLE [表名字] ADD [列名称] INT NOT NULL COMMENT '注释说明' 3:修 ... 
- SQL Server同步复制问题排查方法
			1.应用复制的命令时在订阅服务器上找不到该行 解决方法:用系统存储过程sp_browsereplcmds(返回分发数据库中存储的可读版本复制命令的结果集,并将其用作诊断工具. 此存储过程在分发服务器上 ... 
- Hive安装(三)之奇怪的错误
			启动hive命令报错 “Metastore contains multiple versions” 解决方案: 因为hive metastore存储在mysql中,所以登录mysql,use hive ... 
- Linux nmap
			一.简介 Nmap(Network Mapper)是一款开放源代码的网络探测和安全审核工具.它用于快速扫描一个网络和一台主机开放的端口,还能使用TCP/IP协议栈特征探测远程主机的操作系统类型.nma ... 
- Swift 语法笔记01
			Swift 好多新奇的地方啊...妈的 var display: int { get() set() } Tuple: let x: (d:Double, e:String, f:Int) = (3. ... 
- volatile 关键字
			就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.如果没有volatile,基本上会导致这样的结果:要么无 ... 
