#include <stdio.h>
#include <stdlib.h>
struct thing {
int part1;
double *part2;
};
struct thing *setValue (struct thing *t, int pos, double set){
if (t->part1 < pos){ // check to see if array is large enough
t
->part2
= realloc (t
->part2
, (pos
+1) * sizeof(double)); /* assume no error */ for (int a = t->part1 + 1; a < pos + 1; a++)
t->part2[a] = 0;
t->part1 = pos;
}
t->part2[pos] = set; // ALWAYS stores an integer, don't know why
return t;
}
int main(void) {
struct thing *abc;
abc
= malloc(sizeof(struct thing
)); /* assume no error */ abc->part1 = 0;
abc
->part2
= malloc(sizeof(double)); /* assume no error */ setValue(abc, 42, 4.2);
setValue(abc, 4, -0.04);
printf("abc's values: %f and %f\n", abc
->part2
[4], abc
->part2
[42]); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCB0aGluZyB7CiAgICBpbnQgcGFydDE7CiAgICBkb3VibGUgKnBhcnQyOwp9OwoKc3RydWN0IHRoaW5nICpzZXRWYWx1ZSAoc3RydWN0IHRoaW5nICp0LCBpbnQgcG9zLCBkb3VibGUgc2V0KXsKICAgIGlmICh0LT5wYXJ0MSA8IHBvcyl7IC8vIGNoZWNrIHRvIHNlZSBpZiBhcnJheSBpcyBsYXJnZSBlbm91Z2gKICAgICAgICB0LT5wYXJ0MiA9IHJlYWxsb2MgKHQtPnBhcnQyLCAocG9zKzEpICogc2l6ZW9mKGRvdWJsZSkpOyAvKiBhc3N1bWUgbm8gZXJyb3IgKi8KICAgICAgICBmb3IgKGludCBhID0gdC0+cGFydDEgKyAxOyBhIDwgcG9zICsgMTsgYSsrKQogICAgICAgICAgICB0LT5wYXJ0MlthXSA9IDA7CiAgICAgICAgdC0+cGFydDEgPSBwb3M7CiAgICB9CiAgICB0LT5wYXJ0Mltwb3NdID0gc2V0OyAvLyBBTFdBWVMgc3RvcmVzIGFuIGludGVnZXIsIGRvbid0IGtub3cgd2h5CiAgICByZXR1cm4gdDsKfQoKaW50IG1haW4odm9pZCkgewogIHN0cnVjdCB0aGluZyAqYWJjOwogIGFiYyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHRoaW5nKSk7IC8qIGFzc3VtZSBubyBlcnJvciAqLwogIGFiYy0+cGFydDEgPSAwOwogIGFiYy0+cGFydDIgPSBtYWxsb2Moc2l6ZW9mKGRvdWJsZSkpOyAvKiBhc3N1bWUgbm8gZXJyb3IgKi8KICBzZXRWYWx1ZShhYmMsIDQyLCA0LjIpOwogIHNldFZhbHVlKGFiYywgNCwgLTAuMDQpOwogIHByaW50ZigiYWJjJ3MgdmFsdWVzOiAlZiBhbmQgJWZcbiIsIGFiYy0+cGFydDJbNF0sIGFiYy0+cGFydDJbNDJdKTsKICByZXR1cm4gMDsKfQ==