Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

C++ Memory leak error when resizing C++ dynamic array

Please can someone help. I am struck in this C++ code. When I ran I yesterday it was fine but today it gives memory leak error when function resizeArray() is run third time.

The code converts lets say array 3,9,3 to 3,3,3,3,3 buy converting 9 into sum of maximum possible parts.

Please help fix this memory leak

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

#include<cmath>
#include <algorithm>
#include <iterator>
using namespace std;

void resizeArray(int *orig, int size, int newSize) {
        int *resized = new int[newSize];
        for (int i = 0; i < size; i ++)
            resized[i] = orig[i];
        delete [] orig;
        orig = resized;
}

int main(){
    int n = 3;
    int *arr = new int[n];
    int arrLength = n;
    arr[0] = 3;
    arr[1] = 9;
    arr[2] = 3;
    int *arrSorted = new int[0];
    int sortedArrayLength = 0;
    int temp;
    unsigned long long int limit = 10e4;
    long long parts = 0;
    int extra = 0;
    int mainArrayIndex = 0;

    for(int i = 0; i<n/2; i++){
        temp = arr[i];
        arr[i] = arr[n-i-1];
        arr[n-i-1] = temp;
    }

    for(int i = 0; i < n; i++){
        parts = floor((arr[i] - 1) / (limit)) + 1;
        limit = arr[i] / parts;
        extra = arr[i] % parts;

        for(int index = 0; index < extra; index++){
            resizeArray(arrSorted, sortedArrayLength, sortedArrayLength + 1);

            arrSorted[mainArrayIndex] =     limit+1;
            mainArrayIndex+=1;
            sortedArrayLength+=1;
        }


        for(int index = 0; index < parts - extra; index++){
            resizeArray(arrSorted, sortedArrayLength, sortedArrayLength + 1);
            arrSorted[mainArrayIndex] =     limit;
            mainArrayIndex+=1;
            sortedArrayLength+=1;
        }

    }

    cout << "Array sorted steps taken" << " " << sortedArrayLength - arrLength;
    cout << endl;

    for(int i = 0; i < sortedArrayLength; i++){
        if(i == 0)
            cout <<  "[";

        cout << arrSorted[i];
        if(i < sortedArrayLength - 1)
            cout << ", ";

        if(i == sortedArrayLength - 1)
            cout << "]";
    }

    delete []arr;
    delete []arrSorted;

}

>Solution :

Your helper function’s orig = resized; doesn’t reassign your main function’s arrSorted as you intend. Use a reference:

void resizeArray(int *&orig, ...) {

(That and the lack of including iostream are the only correctness issues I see, and this fix got rid of the error.)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading