Question: I read that dynamic semantic errors cannot be detected by the C compiler as semantic analysis phase catches only static semantic errors.

Then which component of C compiler does the checking of dynamic semantic errors?

Answer: 
> 
> which component of C compiler does the checking of dynamic semantic errors?
> 
> 
> 

No phase. They are detected at runtime, if at all, by definition.

> 
> By dynamic semantic error, I mean accessing an index of array (out of bounds).
> 
> 
> 

There is no such check in C.

> 
> I read somewhere that compiler generates code for checking dynamic semantic errors.
> 
> 
> 

Not in C.

> 
> I am not sure what it meant.
> 
> 
> 

Nothing in the case of C. Possibly you were reading about some other language. In any case the dynamic semantic check is still executed at runtime, not by any compiler phase.
As for my understanding the dynamic semantic errors can be discovered only during the runtime. C does not have any mechanisms for it, as C does not allow any dynamic semantics at all :) It is not an interpreted or JIT comiled language. 

If you provide a real example of the dynamic semantic error in C, it will clarify what you actually mean