看板 C_and_CPP 關於我們 聯絡資訊
各位大大好小弟是剛學程式不久的小魯 最近在跑一支程式的時候,該程式的某個函數用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
wtchen: 你free掉了pointer還是在阿,只是指到的記憶體不再合法 12/27 03:32
wtchen: 如果該記憶體剛好沒別的程式用到,資料就會一直留在那 12/27 03:32
stupid0319: 剛學不久,要完全弄懂記憶體分配應該還要一段時間 12/27 07:31
Neisseria: 這件事我前一陣子也試過,真的讀得到值 12/27 10:34
Neisseria: 但是這不是應有的撰碼方式,還是不要這樣玩比較好 12/27 10:35
james732: 你把租的房間退租了之後闖進去,會有什麼事沒人知道 12/27 11:00
uranusjr: #1OKbindm 就在上一頁 12/27 11:15