Array Dynamic resize in heap





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







2












$begingroup$


I have answered a Question in Stackoverflow link.




a) Create a function called resize that can be used to increase the
size of integer arrays dynamically. The function takes three
parameters. The first parameter is the original array, the second
parameter is the size of this array, and the third parameter is the
size of the larger array to be created by this function. Make sure
that you allocate memory from the heap inside this function. After
allocating memory for the second array the function must copy the
elements from the first array into the larger array. Finally, the
function must return a pointer to the new array.



b. In main, allocate an array on the heap that is just large enough to
store the integers 5, 7, 3, and 1.



c. Resize the array to store 10 integers by calling the resize
function created in step a. Remove the old (smaller) array from the
heap. Add the numbers 4, 2, and 8 to the end of the new array.



d. Write a sort function that sorts any integer array in increasing
order.



e. Use the sort function to sort the array of numbers in c above.
Display the sorted numbers.




Is there a Dangling pointer issue.



#include <array>
#include <iostream>

void swap(int *xp, int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}

//Bubble Sort
bool sort(int arr, int size)
{
for( int i = 0; i< size -1; i++)
{
for( int j = 0; j < size - i -1; j++)
{
//descending order
if(arr[j]<arr[j+1])
{
swap(&arr[j], &arr[j+1]);
}
}
}
return true;
}

void Print(int Array, int nSize)
{
for( int i = 0; i < nSize; i++)
{
std::cout<<" "<<Array[i];
}
std::cout<<"n";
}

void Resize( int *&Array, const int& nSizeOld, const int& nSize )
{
int * newArray = new int[nSize];

//Copy Elements of the Array
for(int i = 0; i< nSizeOld; i++)
{
newArray[i] = Array[i];
}

delete Array;

//Assign ptr of Prev to new Array
Array = newArray;
}

int _tmain(int argc, _TCHAR* argv)
{
const int kNewSize = 10, kSize = 5;
int *pMyArray = new int[kSize];

//Set Values
for( int i = 0; i< kSize; ++i )
{
pMyArray[i] = i * 5;
}

Resize( pMyArray, kSize, kNewSize );

//Set Values
for( int i = kSize; i< kNewSize; ++i )
{
pMyArray[i] = i * 10;
}

Print(pMyArray, kNewSize);

sort(pMyArray, kNewSize);

Print(pMyArray, kNewSize);

if( pMyArray!=NULL )
{
delete pMyArray;
}

return 0;
}









share|improve this question









New contributor




f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$



















    2












    $begingroup$


    I have answered a Question in Stackoverflow link.




    a) Create a function called resize that can be used to increase the
    size of integer arrays dynamically. The function takes three
    parameters. The first parameter is the original array, the second
    parameter is the size of this array, and the third parameter is the
    size of the larger array to be created by this function. Make sure
    that you allocate memory from the heap inside this function. After
    allocating memory for the second array the function must copy the
    elements from the first array into the larger array. Finally, the
    function must return a pointer to the new array.



    b. In main, allocate an array on the heap that is just large enough to
    store the integers 5, 7, 3, and 1.



    c. Resize the array to store 10 integers by calling the resize
    function created in step a. Remove the old (smaller) array from the
    heap. Add the numbers 4, 2, and 8 to the end of the new array.



    d. Write a sort function that sorts any integer array in increasing
    order.



    e. Use the sort function to sort the array of numbers in c above.
    Display the sorted numbers.




    Is there a Dangling pointer issue.



    #include <array>
    #include <iostream>

    void swap(int *xp, int *yp)
    {
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
    }

    //Bubble Sort
    bool sort(int arr, int size)
    {
    for( int i = 0; i< size -1; i++)
    {
    for( int j = 0; j < size - i -1; j++)
    {
    //descending order
    if(arr[j]<arr[j+1])
    {
    swap(&arr[j], &arr[j+1]);
    }
    }
    }
    return true;
    }

    void Print(int Array, int nSize)
    {
    for( int i = 0; i < nSize; i++)
    {
    std::cout<<" "<<Array[i];
    }
    std::cout<<"n";
    }

    void Resize( int *&Array, const int& nSizeOld, const int& nSize )
    {
    int * newArray = new int[nSize];

    //Copy Elements of the Array
    for(int i = 0; i< nSizeOld; i++)
    {
    newArray[i] = Array[i];
    }

    delete Array;

    //Assign ptr of Prev to new Array
    Array = newArray;
    }

    int _tmain(int argc, _TCHAR* argv)
    {
    const int kNewSize = 10, kSize = 5;
    int *pMyArray = new int[kSize];

    //Set Values
    for( int i = 0; i< kSize; ++i )
    {
    pMyArray[i] = i * 5;
    }

    Resize( pMyArray, kSize, kNewSize );

    //Set Values
    for( int i = kSize; i< kNewSize; ++i )
    {
    pMyArray[i] = i * 10;
    }

    Print(pMyArray, kNewSize);

    sort(pMyArray, kNewSize);

    Print(pMyArray, kNewSize);

    if( pMyArray!=NULL )
    {
    delete pMyArray;
    }

    return 0;
    }









    share|improve this question









    New contributor




    f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$















      2












      2








      2





      $begingroup$


      I have answered a Question in Stackoverflow link.




      a) Create a function called resize that can be used to increase the
      size of integer arrays dynamically. The function takes three
      parameters. The first parameter is the original array, the second
      parameter is the size of this array, and the third parameter is the
      size of the larger array to be created by this function. Make sure
      that you allocate memory from the heap inside this function. After
      allocating memory for the second array the function must copy the
      elements from the first array into the larger array. Finally, the
      function must return a pointer to the new array.



      b. In main, allocate an array on the heap that is just large enough to
      store the integers 5, 7, 3, and 1.



      c. Resize the array to store 10 integers by calling the resize
      function created in step a. Remove the old (smaller) array from the
      heap. Add the numbers 4, 2, and 8 to the end of the new array.



      d. Write a sort function that sorts any integer array in increasing
      order.



      e. Use the sort function to sort the array of numbers in c above.
      Display the sorted numbers.




      Is there a Dangling pointer issue.



      #include <array>
      #include <iostream>

      void swap(int *xp, int *yp)
      {
      int temp = *xp;
      *xp = *yp;
      *yp = temp;
      }

      //Bubble Sort
      bool sort(int arr, int size)
      {
      for( int i = 0; i< size -1; i++)
      {
      for( int j = 0; j < size - i -1; j++)
      {
      //descending order
      if(arr[j]<arr[j+1])
      {
      swap(&arr[j], &arr[j+1]);
      }
      }
      }
      return true;
      }

      void Print(int Array, int nSize)
      {
      for( int i = 0; i < nSize; i++)
      {
      std::cout<<" "<<Array[i];
      }
      std::cout<<"n";
      }

      void Resize( int *&Array, const int& nSizeOld, const int& nSize )
      {
      int * newArray = new int[nSize];

      //Copy Elements of the Array
      for(int i = 0; i< nSizeOld; i++)
      {
      newArray[i] = Array[i];
      }

      delete Array;

      //Assign ptr of Prev to new Array
      Array = newArray;
      }

      int _tmain(int argc, _TCHAR* argv)
      {
      const int kNewSize = 10, kSize = 5;
      int *pMyArray = new int[kSize];

      //Set Values
      for( int i = 0; i< kSize; ++i )
      {
      pMyArray[i] = i * 5;
      }

      Resize( pMyArray, kSize, kNewSize );

      //Set Values
      for( int i = kSize; i< kNewSize; ++i )
      {
      pMyArray[i] = i * 10;
      }

      Print(pMyArray, kNewSize);

      sort(pMyArray, kNewSize);

      Print(pMyArray, kNewSize);

      if( pMyArray!=NULL )
      {
      delete pMyArray;
      }

      return 0;
      }









      share|improve this question









      New contributor




      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      I have answered a Question in Stackoverflow link.




      a) Create a function called resize that can be used to increase the
      size of integer arrays dynamically. The function takes three
      parameters. The first parameter is the original array, the second
      parameter is the size of this array, and the third parameter is the
      size of the larger array to be created by this function. Make sure
      that you allocate memory from the heap inside this function. After
      allocating memory for the second array the function must copy the
      elements from the first array into the larger array. Finally, the
      function must return a pointer to the new array.



      b. In main, allocate an array on the heap that is just large enough to
      store the integers 5, 7, 3, and 1.



      c. Resize the array to store 10 integers by calling the resize
      function created in step a. Remove the old (smaller) array from the
      heap. Add the numbers 4, 2, and 8 to the end of the new array.



      d. Write a sort function that sorts any integer array in increasing
      order.



      e. Use the sort function to sort the array of numbers in c above.
      Display the sorted numbers.




      Is there a Dangling pointer issue.



      #include <array>
      #include <iostream>

      void swap(int *xp, int *yp)
      {
      int temp = *xp;
      *xp = *yp;
      *yp = temp;
      }

      //Bubble Sort
      bool sort(int arr, int size)
      {
      for( int i = 0; i< size -1; i++)
      {
      for( int j = 0; j < size - i -1; j++)
      {
      //descending order
      if(arr[j]<arr[j+1])
      {
      swap(&arr[j], &arr[j+1]);
      }
      }
      }
      return true;
      }

      void Print(int Array, int nSize)
      {
      for( int i = 0; i < nSize; i++)
      {
      std::cout<<" "<<Array[i];
      }
      std::cout<<"n";
      }

      void Resize( int *&Array, const int& nSizeOld, const int& nSize )
      {
      int * newArray = new int[nSize];

      //Copy Elements of the Array
      for(int i = 0; i< nSizeOld; i++)
      {
      newArray[i] = Array[i];
      }

      delete Array;

      //Assign ptr of Prev to new Array
      Array = newArray;
      }

      int _tmain(int argc, _TCHAR* argv)
      {
      const int kNewSize = 10, kSize = 5;
      int *pMyArray = new int[kSize];

      //Set Values
      for( int i = 0; i< kSize; ++i )
      {
      pMyArray[i] = i * 5;
      }

      Resize( pMyArray, kSize, kNewSize );

      //Set Values
      for( int i = kSize; i< kNewSize; ++i )
      {
      pMyArray[i] = i * 10;
      }

      Print(pMyArray, kNewSize);

      sort(pMyArray, kNewSize);

      Print(pMyArray, kNewSize);

      if( pMyArray!=NULL )
      {
      delete pMyArray;
      }

      return 0;
      }






      c++ c++11 pointers






      share|improve this question









      New contributor




      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 21 secs ago







      f1r361rd













      New contributor




      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 1 hour ago









      f1r361rdf1r361rd

      113




      113




      New contributor




      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      f1r361rd is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          2 Answers
          2






          active

          oldest

          votes


















          2












          $begingroup$

          If you had tagged this code as C, it would have been acceptable. Since you tagged it as C++, it's horrible.



          Instead of writing your own swap function, there's already std::swap in <algorithm>.



          Instead of writing bubble sort yourself, just use std::sort, also from <algorithm>.



          Instead of using arrays and resizing them yourself, just use std::vector<int>, from <vector>.



          After applying these transformations, you cannot have a dangling pointer anymore since your code is completely pointer-free.



          As part of an exercise for learning the basic operations on memory management, it's ok to write code like this, but never ever use such code in production. In production the code should look like this:



          #include <algorithm>
          #include <iostream>
          #include <vector>

          void Print(const std::vector<int> &nums)
          {
          for(int num : nums)
          {
          std::cout << " " << num;
          }
          std::cout << "n";
          }

          int main()
          {
          std::vector<int> nums { 5, 7, 3, 1 };

          // There's probably a more elegant way to add the elements to the vector.
          nums.push_back(4);
          nums.push_back(2);
          nums.push_back(8);

          std::sort(nums.begin(), nums.end());

          Print(nums);
          }


          By the way, your original code doesn't have any dangling pointer as well. Well done.



          You don't need the != NULL check before the delete since that pointer cannot be null. In modern C++ (since C++11 I think) you would also write nullptr instead of NULL. The reason is that historically NULL had not been guaranteed to be of pointer type.



          Have a look at https://www.cplusplus.com/reference/algorithm/ for more algorithms that you shouldn't implement yourself in C++.






          share|improve this answer











          $endgroup$





















            0












            $begingroup$

            The code is obviously wrong: your compiler should have warmed you that Resize() never uses its nSizeOld parameter.





            share









            $endgroup$














              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "196"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });






              f1r361rd is a new contributor. Be nice, and check out our Code of Conduct.










              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f218994%2farray-dynamic-resize-in-heap%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2












              $begingroup$

              If you had tagged this code as C, it would have been acceptable. Since you tagged it as C++, it's horrible.



              Instead of writing your own swap function, there's already std::swap in <algorithm>.



              Instead of writing bubble sort yourself, just use std::sort, also from <algorithm>.



              Instead of using arrays and resizing them yourself, just use std::vector<int>, from <vector>.



              After applying these transformations, you cannot have a dangling pointer anymore since your code is completely pointer-free.



              As part of an exercise for learning the basic operations on memory management, it's ok to write code like this, but never ever use such code in production. In production the code should look like this:



              #include <algorithm>
              #include <iostream>
              #include <vector>

              void Print(const std::vector<int> &nums)
              {
              for(int num : nums)
              {
              std::cout << " " << num;
              }
              std::cout << "n";
              }

              int main()
              {
              std::vector<int> nums { 5, 7, 3, 1 };

              // There's probably a more elegant way to add the elements to the vector.
              nums.push_back(4);
              nums.push_back(2);
              nums.push_back(8);

              std::sort(nums.begin(), nums.end());

              Print(nums);
              }


              By the way, your original code doesn't have any dangling pointer as well. Well done.



              You don't need the != NULL check before the delete since that pointer cannot be null. In modern C++ (since C++11 I think) you would also write nullptr instead of NULL. The reason is that historically NULL had not been guaranteed to be of pointer type.



              Have a look at https://www.cplusplus.com/reference/algorithm/ for more algorithms that you shouldn't implement yourself in C++.






              share|improve this answer











              $endgroup$


















                2












                $begingroup$

                If you had tagged this code as C, it would have been acceptable. Since you tagged it as C++, it's horrible.



                Instead of writing your own swap function, there's already std::swap in <algorithm>.



                Instead of writing bubble sort yourself, just use std::sort, also from <algorithm>.



                Instead of using arrays and resizing them yourself, just use std::vector<int>, from <vector>.



                After applying these transformations, you cannot have a dangling pointer anymore since your code is completely pointer-free.



                As part of an exercise for learning the basic operations on memory management, it's ok to write code like this, but never ever use such code in production. In production the code should look like this:



                #include <algorithm>
                #include <iostream>
                #include <vector>

                void Print(const std::vector<int> &nums)
                {
                for(int num : nums)
                {
                std::cout << " " << num;
                }
                std::cout << "n";
                }

                int main()
                {
                std::vector<int> nums { 5, 7, 3, 1 };

                // There's probably a more elegant way to add the elements to the vector.
                nums.push_back(4);
                nums.push_back(2);
                nums.push_back(8);

                std::sort(nums.begin(), nums.end());

                Print(nums);
                }


                By the way, your original code doesn't have any dangling pointer as well. Well done.



                You don't need the != NULL check before the delete since that pointer cannot be null. In modern C++ (since C++11 I think) you would also write nullptr instead of NULL. The reason is that historically NULL had not been guaranteed to be of pointer type.



                Have a look at https://www.cplusplus.com/reference/algorithm/ for more algorithms that you shouldn't implement yourself in C++.






                share|improve this answer











                $endgroup$
















                  2












                  2








                  2





                  $begingroup$

                  If you had tagged this code as C, it would have been acceptable. Since you tagged it as C++, it's horrible.



                  Instead of writing your own swap function, there's already std::swap in <algorithm>.



                  Instead of writing bubble sort yourself, just use std::sort, also from <algorithm>.



                  Instead of using arrays and resizing them yourself, just use std::vector<int>, from <vector>.



                  After applying these transformations, you cannot have a dangling pointer anymore since your code is completely pointer-free.



                  As part of an exercise for learning the basic operations on memory management, it's ok to write code like this, but never ever use such code in production. In production the code should look like this:



                  #include <algorithm>
                  #include <iostream>
                  #include <vector>

                  void Print(const std::vector<int> &nums)
                  {
                  for(int num : nums)
                  {
                  std::cout << " " << num;
                  }
                  std::cout << "n";
                  }

                  int main()
                  {
                  std::vector<int> nums { 5, 7, 3, 1 };

                  // There's probably a more elegant way to add the elements to the vector.
                  nums.push_back(4);
                  nums.push_back(2);
                  nums.push_back(8);

                  std::sort(nums.begin(), nums.end());

                  Print(nums);
                  }


                  By the way, your original code doesn't have any dangling pointer as well. Well done.



                  You don't need the != NULL check before the delete since that pointer cannot be null. In modern C++ (since C++11 I think) you would also write nullptr instead of NULL. The reason is that historically NULL had not been guaranteed to be of pointer type.



                  Have a look at https://www.cplusplus.com/reference/algorithm/ for more algorithms that you shouldn't implement yourself in C++.






                  share|improve this answer











                  $endgroup$



                  If you had tagged this code as C, it would have been acceptable. Since you tagged it as C++, it's horrible.



                  Instead of writing your own swap function, there's already std::swap in <algorithm>.



                  Instead of writing bubble sort yourself, just use std::sort, also from <algorithm>.



                  Instead of using arrays and resizing them yourself, just use std::vector<int>, from <vector>.



                  After applying these transformations, you cannot have a dangling pointer anymore since your code is completely pointer-free.



                  As part of an exercise for learning the basic operations on memory management, it's ok to write code like this, but never ever use such code in production. In production the code should look like this:



                  #include <algorithm>
                  #include <iostream>
                  #include <vector>

                  void Print(const std::vector<int> &nums)
                  {
                  for(int num : nums)
                  {
                  std::cout << " " << num;
                  }
                  std::cout << "n";
                  }

                  int main()
                  {
                  std::vector<int> nums { 5, 7, 3, 1 };

                  // There's probably a more elegant way to add the elements to the vector.
                  nums.push_back(4);
                  nums.push_back(2);
                  nums.push_back(8);

                  std::sort(nums.begin(), nums.end());

                  Print(nums);
                  }


                  By the way, your original code doesn't have any dangling pointer as well. Well done.



                  You don't need the != NULL check before the delete since that pointer cannot be null. In modern C++ (since C++11 I think) you would also write nullptr instead of NULL. The reason is that historically NULL had not been guaranteed to be of pointer type.



                  Have a look at https://www.cplusplus.com/reference/algorithm/ for more algorithms that you shouldn't implement yourself in C++.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 19 mins ago

























                  answered 24 mins ago









                  Roland IlligRoland Illig

                  11.9k11948




                  11.9k11948

























                      0












                      $begingroup$

                      The code is obviously wrong: your compiler should have warmed you that Resize() never uses its nSizeOld parameter.





                      share









                      $endgroup$


















                        0












                        $begingroup$

                        The code is obviously wrong: your compiler should have warmed you that Resize() never uses its nSizeOld parameter.





                        share









                        $endgroup$
















                          0












                          0








                          0





                          $begingroup$

                          The code is obviously wrong: your compiler should have warmed you that Resize() never uses its nSizeOld parameter.





                          share









                          $endgroup$



                          The code is obviously wrong: your compiler should have warmed you that Resize() never uses its nSizeOld parameter.






                          share











                          share


                          share










                          answered 7 mins ago









                          200_success200_success

                          131k17157422




                          131k17157422






















                              f1r361rd is a new contributor. Be nice, and check out our Code of Conduct.










                              draft saved

                              draft discarded


















                              f1r361rd is a new contributor. Be nice, and check out our Code of Conduct.













                              f1r361rd is a new contributor. Be nice, and check out our Code of Conduct.












                              f1r361rd is a new contributor. Be nice, and check out our Code of Conduct.
















                              Thanks for contributing an answer to Code Review Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              Use MathJax to format equations. MathJax reference.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f218994%2farray-dynamic-resize-in-heap%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              How to label and detect the document text images

                              Vallis Paradisi

                              Tabula Rosettana