[問題] free掉malloc要的空間卻還是能讀取

看板C_and_CPP (C/C++)作者 (ypon1234)時間9年前 (2016/12/27 03:29), 編輯推噓0(007)
留言7則, 5人參與, 最新討論串1/2 (看更多)
各位大大好小弟是剛學程式不久的小魯 最近在跑一支程式的時候,該程式的某個函數用malloc要了1000個double變數的空間 但是free掉指標之後還是可以讀取裡面的內容 請各位大大指點迷津> < 程式碼如下 double find_k(int n, double eta) { int i, size=1000, ibest; double lower, upper, al, g1, g2, step; double y, ybest; double *y; lower = 0.; upper = 1.-eta; step = (upper-lower)/size; y = (double *) malloc(size*sizeof(double)); for (i=1; i < size; i++) { al = lower+step*i; g1 =functionA(...); g2 =functionB(...); y = g2-g1; y[i] = y; } ybest = 1000000.; ibest = 1; for (i=1; i < size; i++) { if (y[i]< ybest) { ybest = y[i]; ibest = i; } } free(y); printf("!!y[99]=%lf\n",y[99]);<<<<<< al = lower+(double)ibest*step; return al; } 小弟的執行環境是win7 用的是dev C++; 如題目所說,用窮舉的方式找出最小的y之後,將指向1000個變數空間的y給free掉 照理來講printf("!!y[99]=%lf\n",y[99])這行敘述應該是跑不出東西的, 請各位大大幫小弟指點迷津@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.88.186 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1482780572.A.1FF.html

12/27 03:32, , 1F
你free掉了pointer還是在阿,只是指到的記憶體不再合法
12/27 03:32, 1F

12/27 03:32, , 2F
如果該記憶體剛好沒別的程式用到,資料就會一直留在那
12/27 03:32, 2F

12/27 07:31, , 3F
剛學不久,要完全弄懂記憶體分配應該還要一段時間
12/27 07:31, 3F

12/27 10:34, , 4F
這件事我前一陣子也試過,真的讀得到值
12/27 10:34, 4F

12/27 10:35, , 5F
但是這不是應有的撰碼方式,還是不要這樣玩比較好
12/27 10:35, 5F

12/27 11:00, , 6F
你把租的房間退租了之後闖進去,會有什麼事沒人知道
12/27 11:00, 6F

12/27 11:15, , 7F
#1OKbindm 就在上一頁
12/27 11:15, 7F
文章代碼(AID): #1OOM-S7_ (C_and_CPP)
文章代碼(AID): #1OOM-S7_ (C_and_CPP)