Upload
lily-wilcox
View
215
Download
0
Embed Size (px)
Citation preview
C Lab 3C 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 Equivalentptr = malloc(2);
ptr = realloc(ptr, 1000);
ptr = malloc(2);
ptr2 = malloc(1000);
memcpy(ptr2, ptr, 2);
free(ptr);
ptr = ptr2;
ptr2 = NULL;
Why not:ptr = malloc(2);realloc(ptr, 1000);
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); //yaaaayyyfree(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?