Are you absolutely sure that the code you post results in the assertion you show? I'm confident that it cannot. The assertion you show is happening when a core::array<video::SMaterial> is being accessed out of bounds. None of the code that you show has a array of that type.
You should be able to use your debugger to get the call stack at the time of the assertion. If you look up the stack, you may find some code that causes the failure.
Oops
The exception was thrown while rendering...
This code was included in a class which was child of CMeshSceneNode and I didn't called copyMaterials() after loading a mesh...
Thanks a lot, the problem is resolved !