dynamic array, manual realloc, renames

This commit is contained in:
2026-05-31 23:39:06 +02:00
parent 2a3cb53aa1
commit 27057ff3ab
+45 -21
View File
@@ -3,48 +3,72 @@
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
struct IntArray{ struct IntArrayStr{
int *data; int *data;
size_t length; size_t length;
size_t capacity;
}; };
void readintarray(struct IntArray *input) { void read_int_array_str(struct IntArrayStr *in_str) {
printf("inputlength:%zu\n", input->length); printf("inputlength:%zu\n", in_str->length);
for (size_t i = 0; i < input->length; i++) { for (size_t i = 0; i < in_str->length; i++) {
printf("digit:%d = %d\n", i, input->data[i]); printf("digit:%zu = %d\n", i, in_str->data[i]);
} }
} }
struct IntArray *create_int_array(size_t length) { struct IntArrayStr *create_int_array_str(size_t in_capacity) {
struct IntArray *myintarray = malloc(sizeof(struct IntArray)); /* allocate memory for struct */ struct IntArrayStr *mystr = malloc(sizeof(struct IntArrayStr)); /* allocate memory for struct */
myintarray->data = malloc(sizeof(int) * length); /* make sure the pointer in the struct points to the array */ mystr->data = malloc(sizeof(int) * in_capacity); /* make sure the pointer in the struct points to the array */
myintarray->length = length; //forgot to actually assign a value to the struct mystr->length = 0; //forgot to actually assign a value to the struct
mystr->capacity = in_capacity;
if (myintarray->data == NULL) { if (mystr->data == NULL) {
exit(0); exit(0);
} }
return myintarray; 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() { int main() {
srand(time(NULL)); srand(time(NULL));
printf("how many numbers?\n"); // change to while loop and take inputs rather than fill with random numbers
int length; printf("input numbers:\n");
scanf("%d", &length);
struct IntArray *myintarray = create_int_array(length); //int input;
size_t length = 10;
/* while (input != -1) { */
/* scanf("%d", &input); */
/* length++; */
/* } */
for (int i = 0; i < length; i++) { struct IntArrayStr *myintarraystr = create_int_array_str(2);
myintarray->data[i] = rand() % 10;
printf("number:%d = %d\n",i,myintarray->data[i]); for (size_t i = 0; i < length; i++) {
int input = rand() % 10;
push_int_array_str(input, myintarraystr);
} }
readintarray(myintarray); read_int_array_str(myintarraystr);
free(myintarray->data); free(myintarraystr->data);
free(myintarray); free(myintarraystr);
return 0; return 0;
} }