int array_size = 3;
int *array = new int[array_size]; // the array I want to use for all functions in this cpp
void Test::deleteandnewArray()
{
delete [] array;
int *array = new int[array_size]; // the array I again want to use for all functions
}
void Test::functionThatFillsArray
{
// code filling up the array
}
void Test::functionThatUsesArray
{
// code useing the array
}
useing the same dynamic array in multiple functions
Hey,
I want to allocate an array and able to delete it and resize it at any time. I also want it to be available in all functions of a class. Now it crashes. This is my current program in short:
Test.cpp
The program crashes when I call functionThatFillsArray(); or functionThatUsesArray();. Is it because the new array is defined in another function and the original one is deleted which is outside?
And is there a way to have a general dynamic array which can be allocated, and called in differant functions?
Greetings, Michael
Quick fix: remove the int * type declaration from the second line in Test::deleteandnewArray() so that it uses the existing (global?) array variable instead of declaring a new local variable which is immediately destroyed as the function leaves scope (thus leaking the memory you just allocated).
Issues: Likely to be inefficient. You ought to delete the last allocated chunk of memory before the program exits. statically initialised Test objects can cause problems if they are initialised before array. If global array can be modified outside of Test, where you might not want it to be (in particular it can be delete[]ed). Requirement to keep array_size correct for number of elements in array if used as an element count.
Consider: making array a (possibly static) member of Test of type std::vector< int > and (provided it is only used to track the required size of the array) eliminate array_size. A vector can be resized using its resize member. vector will not deallocate memory when resized which can make it more time efficient but less space efficient. A vectors memory can be explicitly deallocated by using std::vector< int >().swap(array); (This constructs a temporary vector with no elements and swaps it's contents with array. The temporary vector then leaves scope and destroys its memory).
Enigma
Issues: Likely to be inefficient. You ought to delete the last allocated chunk of memory before the program exits. statically initialised Test objects can cause problems if they are initialised before array. If global array can be modified outside of Test, where you might not want it to be (in particular it can be delete[]ed). Requirement to keep array_size correct for number of elements in array if used as an element count.
Consider: making array a (possibly static) member of Test of type std::vector< int > and (provided it is only used to track the required size of the array) eliminate array_size. A vector can be resized using its resize member. vector will not deallocate memory when resized which can make it more time efficient but less space efficient. A vectors memory can be explicitly deallocated by using std::vector< int >().swap(array); (This constructs a temporary vector with no elements and swaps it's contents with array. The temporary vector then leaves scope and destroys its memory).
Enigma
Yes.
In deleteandnewArray() you've created ANOTHER pointer called array. Get rid of the int * before, to give:
This will use the array "array" at global scope.
In deleteandnewArray() you've created ANOTHER pointer called array. Get rid of the int * before, to give:
void Test::deleteandnewArray(){ delete [] array; array = new int[array_size];}
This will use the array "array" at global scope.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement