#include #include #include #include struct IntArrayStr{ int *data; size_t length; size_t capacity; }; void read_int_array_str(struct IntArrayStr *in_str) { 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; } /* push value to struct, also handle realloc */ void push_int_array_str(int in_int, struct IntArrayStr *in_str){ if (in_str->length == in_str->capacity) { //check if already full in_str->capacity*=2; //if so we should double printf("intarray capacity is now:%zu\n", in_str->capacity); int *temp; //create a temporary pointer temp = realloc(in_str->data, sizeof(int)*in_str->capacity); //realloc the data into a new bucket if(temp == NULL){exit(0);}; //check if actually valid in_str->data = temp; //if valid, make sure the pointer in the struct points to the realloced block } 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 transferring and accidentally put this in the if block printf("intarray length is now:%zu\n", in_str->length); //also had an off-by-one error because I increased length before doing anything } int main() { srand(time(NULL)); printf("input numbers:\n"); struct IntArrayStr *myintarraystr = create_int_array_str(2); int input; size_t length = 10; while (input != -1) { scanf("%d", &input); push_int_array_str(input, myintarraystr); } read_int_array_str(myintarraystr); free(myintarraystr->data); free(myintarraystr); return 0; }