Browse Source

Fix too little memory allocation bug

main
raffitz 5 years ago
parent
commit
e77f10eb2a
Signed by: raffitz
GPG Key ID: 0224483A6E6AC710
  1. 9
      expression.c

9
expression.c

@ -71,15 +71,13 @@ struct expression_result resolve(union expression* root){ @@ -71,15 +71,13 @@ struct expression_result resolve(union expression* root){
sprintf(result.text, "%lld",(*root).constant.value);
break;
case WEBDICE_ROLL:
size = (*root).roll.count * ceill(15+log10l((*root).roll.count * (*root).roll.type));
size = ((*root).roll.count + 1) * ceill(30+log10l((*root).roll.count * (*root).roll.type));
length += (int64_t) size;
result.min = (*root).roll.count;
result.max = (*root).roll.count * (*root).roll.type;
result.expected = (*root).roll.count * ((*root).roll.type + 1.0) / 2.0;
result.text = (char*) malloc(length * sizeof(char));
fprintf(stderr,"COUNT: %lld\n\n",(*root).roll.count);
values = (int64_t*) malloc((*root).roll.count * sizeof(int64_t));
fprintf(stderr,"ALLOC'D %X\n\n",values);
for (i = 0, j = (*root).roll.count, total = 0; i < (*root).roll.count; i++, j--){
values[i] = 1 + (rand() % (*root).roll.type);
total += values[i];
@ -93,12 +91,7 @@ struct expression_result resolve(union expression* root){ @@ -93,12 +91,7 @@ struct expression_result resolve(union expression* root){
sprintf(&(result.text[strlen(result.text)]),"%lld,", values[i]);
}
}
fprintf(stderr,"FREE'D %X\n\n",values);
fprintf(stderr,"FREE'D %X\n\n",values);
fprintf(stderr,"FREE'D %X\n\n",values);
fflush(stderr);
free(values);
fprintf(stderr,"FREE'D %X\n\n",values);
result.actual = total;
break;
case WEBDICE_BINARY:

Loading…
Cancel
Save