Transcript pptx
C Lab 3 C Arraylist Implementation Goals ● Review ○ ○ Referencing/Dereferencing Free ● realloc and memmove ● ArrayList ● Debugging with GDB Review: Pointer Syntax ● To get pointer to something, use ‘&’ ● ‘&’ allows to pass items by reference ● To dereference or get item pointed to use ‘*’ ● ‘*’ is the opposite of ‘&’ realloc ● realloc increases the size of memory allotted to pointer ● Arguments: pointer, amount of memory to allocate ● Returns a void* pointer to the reallocated memory ● Preserves data pointed to by original pointer ● Original pointer should be set to NULL, if space is found elsewhere Realloc and Equivalent ptr = malloc(2); ptr = realloc(ptr, 1000); Why not: ptr = malloc(2); realloc(ptr, 1000); ptr = malloc(2); ptr2 = malloc(1000); memcpy(ptr2, ptr, 2); free(ptr); ptr = ptr2; ptr2 = NULL; Review: free ● Remember to match each call to malloc with one call to free. int num = 3; free(&num); // :,O int *num = malloc(4) free(num); //yaaaayyy free(num); //staaahp memmove ● Moves data from one memory address to another. ● Provide as arguments destination and source memory addresses, as well as the number of bytes to move. ● Syntax: memmove(dest_addr, source_addr, num_bytes); C Arraylist • Implemented as a struct with these fields: • • • void** buffer; unsigned int buffer_size; unsigned int length; • Buffer size and length are different! • Recall: access struct fields with a.length, (a is a struct), or a->length, (a is a pointer to a struct). C Arraylist • • • • Buffer size and length are different! Buffer size: The maximum number of elements the array list can hold, directly related to the amount of allocated memory. Length: The number of elements the array list actually holds. When the array list is full, expand it by doubling the amount of memory allocated for the buffer. • Need to figure out how to detect this condition. C Arraylist • The arraylist is a list of pointers to memory locations. • Therefore, the buffer variable is a pointer to a pointer (void** type) • We use a void** pointer so that the arraylist can be used to store variables of any type. GDB • Gnu Project Debugger • Tool used to find errors in your code. • See C-lab 3 web page for basic commands. #include • Preprocessor directive to include a header file in your C code. • Example: #include <stdio.h> • Performs textual inclusion (“copy-paste”). • In practice, works like import statements in java, but there are some differences behind the scenes. Debugging with GDB ● Begin the lab exercise ● Where/When might realloc be useful? ● Where/When might free be useful?