日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言错误: HEAP CORRUPTION DETECTED

發(fā)布時(shí)間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言错误: HEAP CORRUPTION DETECTED 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

程序源代碼:

//寫(xiě)文件兩種方式(文本文件和二進(jìn)制文件)#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h>//文本寫(xiě)文件 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;//打開(kāi)文件fpw = fopen(path, "w");//w 打開(kāi)只寫(xiě)文件,若文件存在,則文件長(zhǎng)度清零,即文件內(nèi)容會(huì)消失,若文件不存在則建立該文件//判斷文件是否打開(kāi)成功if (fpw==NULL){ERRO_MSG = 1;printf("文件打開(kāi)失敗 fpw==NULL erro msg:%d\n", ERRO_MSG);return ERRO_MSG;}//開(kāi)始寫(xiě)文件 fputs(pword, fpw);//關(guān)閉文件if (fpw!=NULL){fclose(fpw);}return ERRO_MSG; }//文件讀文件 char ** readtxt(const char *path)//二級(jí)指針做輸出 {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;//打開(kāi)文件pfr = fopen(path, "r");if (pfr==NULL){ERRO_MSG = 3;printf("pfr==NULL erro msg:%d,文件路徑:%s\n", ERRO_MSG, path);//return ERRO_MSG; }//開(kāi)始讀文件//1.定義文件緩存數(shù)組char bufarr[100] = { 0 };//2.0 獲取文本具體行數(shù)//2.1 定義臨時(shí)變量int index = 0;//2.0定義返回二維數(shù)組char **resbuf = (char **)malloc(sizeof(char *)*5);//讀文件while (!feof(pfr)){//feof()如果文件結(jié)束,則返回非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打倒日本帝國(guó)主義和所對(duì)符合大家的喲撒\r\ndsafgshfetgrhet");char **pdata = NULL;pdata=readtxt(path1);int index = 0;if (pdata!=NULL){while (pdata[index] != NULL){printf("%s\n", pdata[index]);//釋放內(nèi)存free(pdata[index]);pdata[index] = NULL;index++;}free(pdata);pdata = NULL;}system("pause"); }

?

報(bào)錯(cuò)頁(yè)面

?

?

錯(cuò)誤解析:

?這個(gè)錯(cuò)誤是在釋放字符串指針的時(shí)候報(bào)錯(cuò),具體行數(shù)如圖

錯(cuò)誤原因:

通過(guò)對(duì)錯(cuò)誤進(jìn)行百度,我理解了這個(gè)錯(cuò)誤的原因是,釋放一個(gè)字符串指針,但是這個(gè)字符串指針被破壞了,舉例說(shuō)明:

char *str=(char *)malloc(sizeof(char)*10);//分配了10個(gè)字節(jié)大小的內(nèi)存空間

strcpy(str,"1234567890");//字符串拷貝,字符串”1234567890“是11個(gè)字符,這個(gè)拷貝操作會(huì)破壞字符指針str,此時(shí)會(huì)拷貝11字節(jié)到str指向的內(nèi)存空間里,超過(guò)了原來(lái)分配的10個(gè)字節(jié)大小的內(nèi)存空間

如果這時(shí)候用free(str);釋放內(nèi)存就會(huì)報(bào)錯(cuò) ?---HEAP CORRUPTION DETECTED

?

錯(cuò)誤產(chǎn)生原因:

這個(gè)錯(cuò)誤產(chǎn)生的原因就是對(duì)strlen()這個(gè)函數(shù)理解的不到位,舉例:

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

打印出10,但是如果你分配字符串應(yīng)該分配11個(gè),留一個(gè)字節(jié)給'\0'

而我上面就犯了這個(gè)錯(cuò)誤

總結(jié)

以上是生活随笔為你收集整理的C语言错误: HEAP CORRUPTION DETECTED的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。