glGenBuffers(1, buf.buffer); // You allocate a single buffer here.
glBindBuffer(GL_ARRAY_BUFFER, buf.buffer[Vertices+ offset]); // And then access it like an array here.
If "buf.buffers" is an array, then you need to tell glGenBuffers how many buffers to generate. You are currently telling it to create one buffer, and then you access it like an array of buffers.
Also, you need a separate buffer for each array. One for "GL_VERTEX_ARRAY", one for "GL_COLOR_ARRAY" and one for "GL_ELEMENT_ARRAY". You are calling glGenBuffers three times in a row on the same buffer, thereby overwriting the buffer. At the end of your "make_buffer" function, only the element buffer exists.