[問題] free時出現錯誤?
想再請問一下
int size = 10;
float *M_1;
M_1=(float *)calloc(size+1,sizeof(float));
然後中間過程中都只做 M_1[X] X->0~size
只對其做取值、放入新值,加減乘的動作
最後做 free(M_1);
有什麼特殊情況會導致
中間執行中無誤,反而在free時會錯呢?
謝謝
感謝 VictorTom 詳細的說明
-> C語言沒有對array邊界或pointer的存取做太多檢查
Ex: 假如你動態要了ABC三塊記憶體, 結果在A用超過寫壞了
不該寫的地方, 比如恰好把BC的管理區塊寫壞了, 那麼你會
在free BC的時候才發現error跳出來, 但實際上問題根本是
發生在存取A的時候.
-------------------------------------------------------------
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS 2008
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
no
問題(Question):
free資料時跳出錯誤訊息
http://ppt.cc/ZXkP
餵入的資料(Input):
Dimension = 2;
DataSheet =10000;
預期的正確結果(Expected Output):
可以正常free掉結束程式
錯誤結果(Wrong Output):
free顯示錯誤
程式碼(Code):(請善用置底文網頁, 記得排版)
float *Dimension_1;
float *Dimension_2;
float *M_1;
float *M_2;
float *M_3;
float *M_4;
float *M_5;
float *M_6;
float *temp_1;
float *temp_2;
float *temp_3;
float *temp_4;
float *temp_5;
float *temp_6;
//中間讀檔過程使用 Dimension_1 & Dimension_2
已檢查無誤
int MAX=4;
long int size = DataSheet*MAX+2;
// DataSheet = 10000
M_1=(float *)calloc(size+1,sizeof(float));
M_2=(float *)calloc(size+1,sizeof(float));
M_3=(float *)calloc(size+1,sizeof(float));
M_4=(float *)calloc(size+1,sizeof(float));
M_5=(float *)calloc(size+1,sizeof(float));
M_6=(float *)calloc(size+1,sizeof(float));
temp_1 = (float *)calloc(size+1,sizeof(float));
temp_2 = (float *)calloc(size+1,sizeof(float));
temp_3 = (float *)calloc(size+1,sizeof(float));
temp_4 = (float *)calloc(size+1,sizeof(float));
temp_5 = (float *)calloc(size+1,sizeof(float));
temp_6 = (float *)calloc(size+1,sizeof(float));
for (long int i = 0 ; i < size+1 ; i++)
{
// printf("i =%d\n",i);
M_1[i]=-1;
M_2[i]=-1;
M_3[i]=-1;
M_4[i]=-1;
M_5[i]=-1;
M_6[i]=-1;
temp_1[i]=-1;
temp_2[i]=-1;
temp_3[i]=-1;
temp_4[i]=-1;
temp_5[i]=-1;
temp_6[i]=-1;
}
free(Dimension_1);
free(Dimension_2);
free(M_1);
printf("--------------------------結束 free(M_1) \n");
free(M_2);
printf("--------------------------結束 free(M_2) \n");
free(M_3);
printf("--------------------------結束 free(M_3) \n");
free(M_4);
printf("--------------------------結束 free(M_4) \n");
free(M_5);
printf("--------------------------結束 free(M_5) \n");
free(M_6);
printf("--------------------------結束 free(M_6) \n");
free(temp_1);
free(temp_2);
free(temp_3);
free(temp_4);
free(temp_5);
free(temp_6);
補充說明(Supplement):
已經確定運算過程中沒有使用到free,但會在free(M_1); 中斷
若將free(M_1)註解掉,則會變成free(M_2)錯誤 1~6
但 free temp_1~6 不會錯誤,程式中間也沒有出現M_1~M_6存取錯誤
也將中間過程全部註解掉還是會跑出錯誤訊息
錯誤圖片:http://ppt.cc/ZXkP
另外一支程式也是相同架構寫的只有資料算法不同但卻可以free掉
請各位高手幫幫忙@@" 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.191.88
→
09/12 06:11, , 1F
09/12 06:11, 1F
→
09/12 06:15, , 2F
09/12 06:15, 2F
→
09/12 06:22, , 3F
09/12 06:22, 3F
推
09/12 12:33, , 4F
09/12 12:33, 4F
→
09/12 12:33, , 5F
09/12 12:33, 5F
→
09/12 12:34, , 6F
09/12 12:34, 6F
→
09/12 12:34, , 7F
09/12 12:34, 7F
→
09/12 12:39, , 8F
09/12 12:39, 8F
→
09/12 12:40, , 9F
09/12 12:40, 9F
→
09/12 13:15, , 10F
09/12 13:15, 10F
→
09/12 13:15, , 11F
09/12 13:15, 11F
推
09/12 13:34, , 12F
09/12 13:34, 12F
→
09/12 13:34, , 13F
09/12 13:34, 13F
→
09/12 13:35, , 14F
09/12 13:35, 14F
→
09/12 13:35, , 15F
09/12 13:35, 15F
→
09/12 13:36, , 16F
09/12 13:36, 16F
→
09/12 13:36, , 17F
09/12 13:36, 17F
→
09/12 13:37, , 18F
09/12 13:37, 18F
→
09/12 13:37, , 19F
09/12 13:37, 19F
→
09/12 13:37, , 20F
09/12 13:37, 20F
→
09/12 13:37, , 21F
09/12 13:37, 21F
→
09/12 13:38, , 22F
09/12 13:38, 22F
→
09/12 13:38, , 23F
09/12 13:38, 23F
→
09/12 13:38, , 24F
09/12 13:38, 24F
→
09/12 13:38, , 25F
09/12 13:38, 25F
→
09/12 13:39, , 26F
09/12 13:39, 26F
→
09/12 13:39, , 27F
09/12 13:39, 27F
→
09/12 13:40, , 28F
09/12 13:40, 28F
→
09/12 13:40, , 29F
09/12 13:40, 29F
→
09/12 13:40, , 30F
09/12 13:40, 30F
→
09/12 18:01, , 31F
09/12 18:01, 31F
→
09/12 18:02, , 32F
09/12 18:02, 32F
→
09/12 18:15, , 33F
09/12 18:15, 33F
→
09/12 18:56, , 34F
09/12 18:56, 34F
→
09/12 19:33, , 35F
09/12 19:33, 35F
→
09/12 19:33, , 36F
09/12 19:33, 36F
→
09/12 19:34, , 37F
09/12 19:34, 37F
→
09/12 19:35, , 38F
09/12 19:35, 38F
→
09/12 19:36, , 39F
09/12 19:36, 39F
※ 編輯: kimgtob 來自: 140.116.191.88 (09/12 19:45)
推
09/12 19:52, , 40F
09/12 19:52, 40F
→
09/12 19:53, , 41F
09/12 19:53, 41F
→
09/12 19:53, , 42F
09/12 19:53, 42F
※ 編輯: kimgtob 來自: 140.116.191.88 (09/12 19:54)
→
09/12 19:53, , 43F
09/12 19:53, 43F
→
09/12 19:54, , 44F
09/12 19:54, 44F
→
09/12 19:55, , 45F
09/12 19:55, 45F
→
09/12 19:56, , 46F
09/12 19:56, 46F
→
09/12 19:56, , 47F
09/12 19:56, 47F
→
09/12 19:57, , 48F
09/12 19:57, 48F
→
09/12 19:57, , 49F
09/12 19:57, 49F
→
09/12 19:58, , 50F
09/12 19:58, 50F
※ 編輯: kimgtob 來自: 140.116.191.88 (09/12 20:00)
→
09/12 19:59, , 51F
09/12 19:59, 51F
→
09/12 20:02, , 52F
09/12 20:02, 52F
→
09/12 20:11, , 53F
09/12 20:11, 53F
→
09/13 10:23, , 54F
09/13 10:23, 54F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章