glm::mat3* MV = new glm::mat3 (modelview);
setUniform(m_shader, "normalMatrix", -glm::transpose(glm::inverse(*MV)));
Is there a reason you are using new there? You are also passing just one float to the mat3's constructor, and it's out of bounds.
I would suggest doing something like glm::transpose(glm::inverse(glm::mat3(modelview))). Also, I think you should normalize your normals after the loop where you calculate them.
You can use &matrix or glm::value_ptr(matrix) to access a glm matrix, you don't have to use your own float arrays. But if you really want to, you can convert a float array to mat3 or mat4 with make_mat3 and make_mat4. Just include glm/gtc/type_ptr.hpp to get access to those functions.
Edit. I meant that modelview is glm::mat4. Also, maybe a better example code:
glm::mat4 modelview_matrix; glGetFloatv(GL_MODELVIEW_MATRIX, &modelview_matrix); glm::mat3 normal_matrix = glm::transpose(glm::inverse(glm::mat3(modelview_matrix))); const float *pointer = glm::value_ptr(normal_matrix);