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);
}
不知道你这段代码是用来干什么的,但是目测应该不是free的问题
指针越界导致
int *f = (int *)malloc(sizeof(int)*value+1);
如果想申请value+1个int型,就少了一对括号,应该写成
int *f = (int *)malloc(sizeof(int)*(value+1));
所以导致当j=value时,f[j]的操作越界