Take the 2-minute tour ×

I am using dynamic_cast in my source to cast pointer as some thing like below,

Base *base = here storing the pointer;

Derived *derived = dynamic_cast<Derived*>(base);

In the case of base doesn't have the pointer of the class hierarchy then cast fails and returns NULL. In next lines I am checking NULL. So no issues.

I came across a crash dump, my application crashed due to the dynamic_cast throws exception.

I know dynamic_cast will throw only when used with reference types.

Any idea when the dynamic_cast can throw exception when used with pointer as I used in above source?enter image description here

share|improve this question
+1 great question –  Mehrdad May 10 '13 at 8:01
add comment

2 Answers


In a well-defined program, it cannot. The standard does not allow it:

[C++11: 5.2.7/9]: The value of a failed cast to pointer type is the null pointer value of the required result type. A failed cast to reference type throws std::bad_cast (18.7.2).

However, if you pass dynamic_cast an invalid pointer, then you invoke undefined behaviour and anything may happen, including some implementation-defined C++ exception, or a runtime crash.

share|improve this answer
Thanks for your response. –  Rajesh Subramanian May 10 '13 at 11:54
add comment

dynamic_cast<Derived*> can throw if the pointer passed to it (base) is invalid, since dynamic_cast needs to dereference it in order to know its dynamic type.

EDIT: To be more specific. dynamic_cast will never throw a structured exception (std::bad_cast, for instance) when used with pointers, but it will probably throw an unstructured exception that you cannot catch when passed an invalid pointer. Using invalid pointers causes undefined behaviour, which in this case usually means access to invalid memory and a crash.

Based on the memory dump you have attached to your question, it is clear that pInfo points to an invalid object, hence all those <Memory access error> messages. This means that pInfo is an invalid pointer and this is the reason why your program crashes. You have a bug somewhere and you will have to fix it.

share|improve this answer
As per my analyzis, I came to know, in the case of invalid pointer it's giving NULL. When it can thow exception istead of returning NULL. Can you please give your inputs on what you mean invalid pointer here. –  Rajesh Subramanian May 10 '13 at 6:59
@RajeshSubramanian An invalid pointer is a pointer that does not point to an object nor is null. If base is pointing to a destructed object or has not been initialised to an object's address, it is invalid. –  Gorpik May 10 '13 at 7:14
In my case from the crashdump I found that the object is not null; because before this cast I have a condition for checking null. –  Rajesh Subramanian May 10 '13 at 7:48
If it were null you would have no problem: a dynamic_cast of null always yields null. But is the pointer pointing to a valid object? A valid object is one that has been constructed but not yet destroyed. –  Gorpik May 10 '13 at 7:50
The object is not null. But few of the member values it contains are not accessible. Will that make the dynamic_cast to become fail? I have attached the watch window of this object from windbg in my actual question now. (pInfo) is the object passed to dynamic_cast. –  Rajesh Subramanian May 10 '13 at 8:00
show 2 more comments

Your Answer


