contrary to popular belief it is actually wiser (for an OpenGL program) to not delete anything that you know will only be removed when the program closes
when using BufferSubData, you must first allocate a buffer with BufferData. you don't have to put anything inside the buffer, you just need to make sure you do that once it's been allocated, you can call BufferSubData as many times as you want