Linked Lists & Dynamic Memory Errors

Linked Lists & Dynamic Memory Errors

LINKED LISTS & DYNAMIC MEMORY ERRORS Problem Solving with Computers-I 2 Creating a small list struct Node { int data; • Define an empty list Node* next; }; • Add a node to the list with data = 10 struct LinkedList { Node* head; e Node* tail; }; list Insert into a non empty i oD we Inserting a noDe at the head of a linkeD list void insert(LinkedList& h, int value) ; Iterating through the list /* Find the number of elements in the list */ int count(LinkedList& list); list head tail Deleting the list /* Free all the memory that was created on the heap*/ void freeList(LinkedList& list); list head tail Deleting a noDe from the linkeD list x4 f pref IFL next Curr next preve delete curry the ease to delete Iste 11 Need a special 7 Double Linked Lists 1 2 3 Array List Boz FIFE 8 Implementing a double-linked list • Define a noDe in a Double linkeD list • Write functions to • insert a noDe to the heaD/tail of the linkeD list • Print all the elements of the list • Delete a noDe with a given value • Free the list Dangling pointers and memory leaks –Dangling pointer: Pointer points to a memory location that no longer exists –Memory leaks (tardy free): •Heap memory not deallocated before the end of program •Heap memory that can no longer be accessed int t p k p is a dangling pointer dangling 0 is not their car in 9 Hq dereferencing pointers is that 11 Problem with dangling a 11 cause kgfaultPossible Segfault contCC p 11 to 0 we could do a was initialized 1ns had thepointer rdee If null check before referencing Dynamic memory pitfalls Memory leaks (tardy free): Heap memory not deallocated before the end of program Heap memory that can no longer be accessed Example Null check void foo(){ n int* p = new int; } I its de q if only references not null Memory errors can cause your program to crash • Segmentation faults: Program crashes because it attempted to access a memory location that either doesn’t exist or doesn’t have permission to access • Examples of code that results in undefined behavior and potential segmentation fault int arr[] = {50, 60, 70}; int x = 10; int* p; for(int i=0; i<=3; i++){ cout<<*p<<endl; cout<<arr[i]<<endl; } Detecting memory errors • Valgrind is a tool that reports errors related to dynamic memory allocation, access and deletion • Run valgrind on your program using the following command: valgrind --leak-check=full ./myprog Next time • Recursion.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    14 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us