JCoder
JCoder

Reputation: 189

Deleting Arrays With Pointers--Multidimensional and Multipointer---in C++

So I know multiple dimensions/arrays can get confusing, but how do I delete these types of arrays properly? I know the syntax, but adding multiple dimensions/pointers gets tricky. Here's some snippet code:

  //FIRST PROBLEM
  //function to add an item to a pointer array
  //due to problems in adding something directly, I created a temp
  //temp is not necessary if there's a way without it
  int y = 6;
  int x = 5;
  int *myList = new int[x];
  void List::add(int newInt)
  {
      void List::add(int newInt){
      int *temp = new int[x+1];
      temp = myList;
      temp[x+1] = newInt;
      delete [] myList;
      int *myList = temp;
  }

 //SECOND PROBLEM----tricky multidimensional
 // not getting any errors, but not sure if done properly
 int x;
 int y;
 int** myMatrix;
 cout << "How many rows?" << endl;
 cin >> x;
 myMatrix = new int*[x];
 cout << "How many columns?" << endl;
 cin >> y;
 for (int i=0; i<x; i++)
     myMatrix[i] = new int[y];
 for(int i=0; i<10; ++i){
     for(int j=0; j<10; ++j){
         myMatrix[i][j] = rand();
     }  
     for(int i = 0 ; i < x ; ++i)
     {
         for(int j = 0 ; j < col ; ++j){
           //  delete[] myMatrix[i][j]; (tried this method, did not work)
         }
         delete[] myMatrix[i];
     }
     delete[] myMatrix;
  //looked around for examples, but were all different enough to not help
  //

Upvotes: 1

Views: 58

Answers (1)

πάντα ῥεῖ
πάντα ῥεῖ

Reputation: 1

//  delete[] myMatrix[i][j]; (tried this method, did not work)

The code you have here

myMatrix[i][j] = rand();

doesn't allocate any new heap memory for myMatrix[i][j] (which is of a non pointer type, but a simple int BTW), but just assigns the result of rand() as a value there.

Thus it's not necessary/wrong, you ever call delete for it.


You only call delete/delete[] as counterparts of new/new[] in the reverse order as they were allocated.

Further, to get redeemed from struggling with memory management, I'd seriously recommend using a c++ standard container like std::vector<std::vector<int>> myMatrix; instead of managing raw pointers.

Upvotes: 1

Related Questions