Solved

# C++ Double Pointer

Posted on 2001-09-04
8,359 Views
I would like to know how delete operator will work on with double pointer...
0
Question by:logeswari_b

LVL 2

Expert Comment

If you mean:
X **p;
then delete will work fine for one of the items pointed at.  So, p points at a pointer to an X.  delete will delete the X, or the pointer to the X, but not both.  So typically you would do something like:
p = new X*;
*p = new X;
// ... use p ...
delete *p;
delete p;
You need to think hard about what you are allocating and deleting.
0

Expert Comment

If you're referring to a pointer to a pointer, p**, delete will only operate on the first pointer. To delete both, you need to delete the second first, delete *p; then delete p;
0

LVL 49

Expert Comment

>> I would like to know how delete operator will work on with double pointer...

Just to cover the bases:
Deleting a pointer to a double works just like deleting a pointer to anything else -- it frees up the allocation.

double* pFloatingPtNum= new double;
*pFloatingPtNum= 0.123456789;

delete pFloatingPtNum; // no problemo!

=-=-=-=-=-=-=-=-=-
I have a nearly irresitible urge to lock this question.

-- Dan
0

LVL 2

Expert Comment

Aaaagh
0

LVL 30

Accepted Solution

Axter earned 100 total points
I'm assuming that you are reffering to (**) type of double pointers, which is a pointer array.
Pointer array variables are used for an array of pointers.

The array of pointers are create with the new[] operator.
Since the new[] operator is used to create the array, the delete[] operator should be used to delete the double pointer array.
If you use the plain delete operator, this can cause memory leaks in your program.

The following is an example on how to use a pointer array variable.

void CreateAndDestroyA_Pointer_Array(int QtyPointers)
{
int i;
//Create an array of pointers
int **List = new int*[QtyPointers];

//Create an object (int) for each pointer
for (i = 0;i < QtyPointers;i++)
{
List[i] = new int;
}

//Assign a value to each item in the list
for (i = 0;i < QtyPointers;i++)
{
*List[i] = i*11;
}

//Delete each object
for (i = 0;i < QtyPointers;i++)
{
delete List[i];
}

//Delete the array of pointers
delete [] List;
}

int main(int argc, char* argv[])
{
CreateAndDestroyA_Pointer_Array(15);
return 0;
}

You'll notice in the above example, that before using the delete[] operator, first each individual pointer was deleted.  Then the pointer array was deleted.
0

## Featured Post

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.