#include #include #include #include struct IntArrayStr{ int *data; size_t length; size_t capacity; }; void read_int_array_str(struct IntArrayStr *in_str) { printf("inputlength:%zu\n", in_str->length); for (size_t i = 0; i < in_str->length; i++) { printf("digit:%zu = %d\n", i, in_str->data[i]); } } struct IntArrayStr *create_int_array_str(size_t in_capacity) { struct IntArrayStr *mystr = malloc(sizeof(struct IntArrayStr)); /* allocate memory for struct */ mystr->data = malloc(sizeof(int) * in_capacity); /* make sure the pointer in the struct points to the array */ mystr->length = 0; //forgot to actually assign a value to the struct mystr->capacity = in_capacity; if (mystr->data == NULL) { exit(0); } return mystr; } void push_int_array_str(int in_int, struct IntArrayStr *in_str){ if (in_str->length == in_str->capacity) { in_str->capacity*=2; printf("intarray capacity is now:%zu\n", in_str->capacity); int *temp; temp = realloc(in_str->data, sizeof(int)*in_str->capacity); if(temp == NULL){exit(0);}; in_str->data = temp; printf("intarray length is now:%zu\n", in_str->length); } in_str->data[in_str->length] = in_int; printf("number:%zu = %d\n", in_str->length, in_str->data[in_str->length]); in_str->length++; //didn't read the flow when transfering and accidentally put this in the if block //also had an off-by-one error because I increased length before doing anything } int main() { srand(time(NULL)); // change to while loop and take inputs rather than fill with random numbers printf("input numbers:\n"); //int input; size_t length = 10; /* while (input != -1) { */ /* scanf("%d", &input); */ /* length++; */ /* } */ struct IntArrayStr *myintarraystr = create_int_array_str(2); for (size_t i = 0; i < length; i++) { int input = rand() % 10; push_int_array_str(input, myintarraystr); } read_int_array_str(myintarraystr); free(myintarraystr->data); free(myintarraystr); return 0; }