A dangling pointer arises when you use the address of an object after its lifetime is over.
This may occur in situations like returning addresses of the automatic variables from a function or using the address of the memory block after it is freed.
The following code snippet shows this:
class Sample
{
public: int *ptr; Sample(int i)
{
ptr = new int(i);
}
~Sample()
{
delete ptr;
}
void PrintValO
{
cout« "The value is " « *ptr;
}
};
void SomeFunc(Sample x)
{
cout« "Say i am in someFunc " « endl;
}
int main()
{
Sample si = 10;
SomeFunc(sl);
sl.PrintVal();
}
In the above example when PrintVal() function is called it is called by the pointer that has been freed by the destructor in SomeFunc.
This may occur in situations like returning addresses of the automatic variables from a function or using the address of the memory block after it is freed.
The following code snippet shows this:
class Sample
{
public: int *ptr; Sample(int i)
{
ptr = new int(i);
}
~Sample()
{
delete ptr;
}
void PrintValO
{
cout« "The value is " « *ptr;
}
};
void SomeFunc(Sample x)
{
cout« "Say i am in someFunc " « endl;
}
int main()
{
Sample si = 10;
SomeFunc(sl);
sl.PrintVal();
}
In the above example when PrintVal() function is called it is called by the pointer that has been freed by the destructor in SomeFunc.
0 comments:
Post a Comment