C语言错误: HEAP CORRUPTION DETECTED
生活随笔
收集整理的這篇文章主要介紹了
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 = 0;if (path == NULL){ERRO_MSG = 1;printf("path==NULL erro msg:%d\n", ERRO_MSG);return ERRO_MSG;}if (pword == NULL){ERRO_MSG = 2;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 = 1;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 = 0;if (path==NULL){ERRO_MSG = 1;printf("path==NULL erro msg:%d\n", ERRO_MSG);//return ERRO_MSG; }//定義文件指針FILE *pfr = NULL;//打開文件pfr = fopen(path, "r");if (pfr==NULL){ERRO_MSG = 3;printf("pfr==NULL erro msg:%d,文件路徑:%s\n", ERRO_MSG, path);//return ERRO_MSG; }//開始讀文件//1.定義文件緩存數組char bufarr[100] = { 0 };//2.0 獲取文本具體行數//2.1 定義臨時變量int index = 0;//2.0定義返回二維數組char **resbuf = (char **)malloc(sizeof(char *)*5);//讀文件while (!feof(pfr)){//feof()如果文件結束,則返回非0值,否則返回0memset(bufarr, 0, sizeof(char));fgets(bufarr, 100, 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\\";//只適用于windowchar *path1 = "E:/Test/CwordTest/a1.txt";//writeWord(path1, "asfasdfasdgafdsgadf\r\n打倒日本帝國主義和所對符合大家的喲撒\r\ndsafgshfetgrhet");char **pdata = NULL;pdata=readtxt(path1);int index = 0;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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: g4600黑苹果efi_授人以鱼不如授人
- 下一篇: [Leetcode][第214题][JA