作者ypon123 (ypon1234)
看板C_and_CPP
标题[问题] free掉malloc要的空间却还是能读取
时间Tue Dec 27 03:29:30 2016
各位大大好小弟是刚学程式不久的小鲁
最近在跑一支程式的时候,该程式的某个函数用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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1482780572.A.1FF.html
1F:→ wtchen: 你free掉了pointer还是在阿,只是指到的记忆体不再合法 12/27 03:32
2F:→ wtchen: 如果该记忆体刚好没别的程式用到,资料就会一直留在那 12/27 03:32
3F:→ stupid0319: 刚学不久,要完全弄懂记忆体分配应该还要一段时间 12/27 07:31
4F:→ Neisseria: 这件事我前一阵子也试过,真的读得到值 12/27 10:34
5F:→ Neisseria: 但是这不是应有的撰码方式,还是不要这样玩比较好 12/27 10:35
6F:→ james732: 你把租的房间退租了之後闯进去,会有什麽事没人知道 12/27 11:00