Things To Do with DATA
Things you should do before too much time passes:
EoCE errata
20131210
The original (incorrect) code in src/stack/size.cc is:
int Stack :: getListSize()
{
return (this -> getQuantity());
}
To fix it, note the addition of the reference to the data element between this and getQuantity():
int Stack :: getListSize()
{
return (this -> data -> getQuantity());
}
It has been fixed in the provided code.
20131209
Less of a bug, more of an unexpected behavior– using delete on an allocated object doesn't seem to (at least immediately) deallocate memory, but instead seems to initialize it (sets any subelements to 0). From consulting various pages on the internet, it would appear the following is happening:
upon calling
delete on an instantiated object, the allocated memory is more-or-less marked as deallocated and
can return to the
OS memory heap-
but the pointer pointing to that memory is still in place. Therefore, it is recommended to set any pointer to NULL following a call to
delete.
Without fully realizing this, I halfway did this in the stack and queue destructors (called delete, then set the pointer to NULL). However, I did not do this to the base pointer of the object (only to the data pointer and various node pointers). This left what appeared to be an “initialized” area of memory remaining, which I remember remarking to one person “it appears to be still allocated, but I suspect this is not permanent”, meaning it could well go away and lead to a segmentation fault sort of situation.
So, when interacting with the delete keyword and implementing destructors, remember that the pointer itself should be explicitly set to NULL for the most predictable and, in our case, safest operation.
I have updated any provided destructor code with a (hopefully) working solution… this includes src/node/destroy.cc, src/stack/destroy.cc and src/queue/destroy.cc; I have provided a copy of the src/stack/destroy.cc code here:
#include "stack.h"
Stack :: ~Stack()
{
delete this -> data;
this -> data = NULL; // here I subconsciously did the "right thing"- set data to NULL immediately after calling delete on it
this -> size = 0;
this -> top = NULL;
this = NULL; // a possible means of establishing sane behavior. This needs testing; it may not work here in the destructor.
}
// NOTE: If the explicit "this = NULL;" line doesn't work, one will need to set the deleted pointer to NULL as an immediate next action.
Note that the List destructor has a bit more to it than the node, stack, and queue destructors– the List destructor is effectively our “clearList();” function from earlier implementations, so it should take care to “delete” and set to NULL each node present in the list.
Be sure you do not just set nodes equal to NULL without first de-allocating them with delete– if we don't mark them de-allocated before setting the pointers to NULL, that memory is now disconnected but still allocated, resulting in a MEMORY LEAK.
Trivia: if you call delete on a pointer but do not then set the pointer to NULL and instead go on using it (a pointer using memory marked for de-allocation), we have what is known as a “dangling pointer”. This can result in (in an unpredictable manner) segmentation faults.
20131205
Find the following line, which upon closer analysis reveals all that is happening is the next pointer is being overwritten (with the same value over and over again):
tmp -> setNext(tmp -> getNext());
and replace it with:
tmp = tmp -> getNext();
20131125
Node * getStart();
Node * getEnd();
I also provided a start.cc and end.cc in the src/list/ directory with the usual code skeleton I provided for other functions. Implementation should be obvious if you've made your way through the Node class implementation (hint).
Week NOW
Week 7
Stacks! We went over concepts, and started our implementation (push() on Wednesday).. I asked people to try their hand at implementing pop() and peek(). We will be going over pop() on Thursday.
I put a copy of the code we worked on in class in the /var/public/data/fall2013/stacks/ directory on lab46.
I also asked for some features to be implemented into your linked list (I suggested to use the doubly linked list, although it is by no means necessary):
add a qty variable (int) to your Linked List struct
update your linked list functions to appropriately update qty so it contains an accurate list count
add a mklist() function, in the spirit of create() on the knowledge assessments, and mkstack() in our stack implementation.
-
I resolved the compiler warnings as experienced with my pop() code- the sample code is now in place.
Week 6
Week 5
Next week, there will be a “knowledge assessment check” to evaluate your competency (you HAVE been spending lots of time playing with this out of class, haven't you?) with respect to singly and doubly linked lists.
Your DLLMENU program will utilize the generic use functions (ie no input or output, unless specifically called for, such as displayf()/displayb()).
We will look to implement a doubly linked list library, so that we may move onto to linked list based stacks.
-
-
The day is getting closer; closer to getting your
FreeCell-based Card Game Project completed (still need libraries and stacks before you can pull it off, though).
Week 4
complete singly linked list menu program (SLLMENU)
complete doubly linked list insert functionality (09/19/2013)
complete doubly linked list append functionality (09/20/2013)
work on/complete doubly linked list remove functionality
you will be implementing a separate doubly linked list menu-based program (DLLMENU). Be mindful of this as we progress.
Week 3
complete linked list append functionality (09/11/2013)
complete linked list remove functionality (09/13/2013)
add a menu onto the program so the user can operate the linked list (in progress)
menu should have: build list, view list, clear list, insert, append, remove, sort (least to greatest), and quit
move all linked list functionality to separate functions
start contemplating linked lists with respect to your card game project
Week 2
Have the data types/size program finished (09/06/2013)
look through C/C++ review program(s), and make sure everything makes sense
look through the linked list code, and see if everything makes sense
complete linked list insertion functionality (09/06/2013)
Week 1
Edit/customize the Title and Introduction sections of your Opus]] by start of class Friday, September 6th
-
When you come to class, remember to open a Lab46 terminal, which will be used for attendance/participation purposes.
Make sure you can access the
DATA course homepage from home (you may want to bookmark it).
Make sure you can log into Lab46 from home with your username/password (using PuTTY if on Windows, or some other SSH client).
Get on the class chat, and familiarize yourself with basic screen usage (attaching/detaching).
Finish data type size example for all int variations.
Play with data type size example, experiment with it a little.
-