Dynamic Memory Allocation Problem Dont know how much
Dynamic Memory Allocation • Problem: Don't know how much memory to allocate to an array • Why? – Memory is allocated to the correct size for a record to be written to disk – Size depends upon a particular computer configuration • How? We use the C malloc and free functions
malloc() and free() • void *malloc(size_t size) – – void * is a generic pointer for any type of data size_t is a typedef for unsigned integers allocates size in bytes returns pointer to new memory or NULL • void free(void * data) – – releases memory pointed to by data If data is NULL, no harm done C has no garbage collection, skipping free results in memory leaks Prevent dangling references: set a pointer to NULL after free • Freeing from a function (pass a pointer to a pointer) Function free. My. Structure( void **data) { free(*data); *data = NULL); } Dangling reference: a pointer to dynamic memory that was released Alias: Two pointers to the same dynamically allocated memory
Rules • Never attempt to free memory twice • Never use a pointer after its memory was freed (dangling pointer) • Never attempt to free memory that wasn't allocated dynamically. • Set all pointers to null initially, and after freeing them
Example • Static allocation: int nums[100; • Dynamic allocation int *nums, n; printf("How Many? n"); scanf("%d", &n); nums = malloc(n * sizeof(int)); • • • free(nums); nums = NULL; Note: sizeof is an operator that finds the byte length of a data type
Standard Programming Environment • • • Editors: vi, emacs, pico Compiler: gcc or cc Linker: gcc or cc Automated system builder: make, ant Profiler: gprof (find inefficient functions) Source control system: SCCS, CVS – tracks code changes – coordinates changes among programmers – automatically assign release numbers
Hints for the last lab • • • The file syntax is: model: year: raten A sscanf %s will read the entire string up to a space. If none, it reads everything Find the pointer to the colon, and store a NULL ('