c++ - What's the differences between these two methods of dynamically expanding an array? -


these 2 methods trying dynamically expand array when needed.

method 1.

int size = 10; int count = 0; int number; int* intlist = new int[size]; in >> number;  while (!in.fail()) {     if (count == size)     {         size *= 2;         int* temp = new int[size];         (int = 0; < count; i++)         {             temp[i] = intlist[i];         }         delete[] intlist;         intlist = temp;     }      intlist[count] = number;     count++;     in >> number; } 

method 2

int size = 10; int count = 0; int number; int* intlist = new int[size];  in >> number; while(!cin.fail()) {     if ( count == size )     {         int* temp = intlist;         intlist = new int[size*2];          ( int i=0;i<size; i++)             intlist[i] = temp[i];          delete [] temp;         size = size * 2;          temp = null;     }      intlist[count] = number;     count++;     in >> number; } 

what happens array temp after method 1 done? necessary free memory of temp?

i tried delete[] temp; , pointed null messed intlist.

your 1st example uses temp hold newly created array, while 2nd code uses keep reference original array.

"what happens array temp after method 1 done?"

it's going referenced intlist further.

in 1st case must not delete [] temp; because leave without valid allocation.


in 2nd case intlist pointer moved temp, newly assigned allocation. temp used deep copy contents, , deleted when done.


anyway should note (as mentioned in comments), beyond academical reasons research , learning, rather std::vector<int> intlist; should used solve these kind of problems.


Popular posts from this blog