首页新闻找找看学习计划

为什么free(f)会出错

0
悬赏园豆:20 [待解决问题]

int max(int a, int b){
 return a>b?a:b;
}

void GetResult(int*p,int& Get_Result)

    // 在这里实现功能
 int n = *(p+1) ;  //不包含第一个数字
 int value = *(p+0);
 int i = 0;
 int j = 0;
    int *f = (int *)malloc(sizeof(int)*value+1);
 int *w =  (int *)malloc(sizeof(int)*n );

 if(w==NULL || f==NULL || p==NULL)return;
 memset(f,0,value);
 for(i=1;i<=n;i++){
      w[i-1] = (*(p+2*i +1))*(*(p+2*i));
 }
 for(i=1;i<=n;i++){
  for(j=value; j >= *(p+2*i); j--){
        f[j] = max(f[j],f[j- *(p+2*i )] +w[i-1]);
  }
 }

  

 if(f[value]<0)return ;
 Get_Result=f[value];
 free(w);
 free(f);
}

c
nihaoba的主页 nihaoba | 初学一级 | 园豆:182
提问于:2013-07-15 11:05
< >
分享
所有回答(2)
0

不知道你这段代码是用来干什么的,但是目测应该不是free的问题

胡小颖颖 | 园豆:180 (初学一级) | 2013-09-22 19:30
0

指针越界导致

int *f = (int *)malloc(sizeof(int)*value+1);

如果想申请value+1个int型,就少了一对括号,应该写成

int *f = (int *)malloc(sizeof(int)*(value+1));

所以导致当j=value时,f[j]的操作越界

Monarudo | 园豆:104 (初学一级) | 2014-03-08 00:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册