You can gather scratch memory and size it for the worst case using Euler's Characteristic:
https://en.wikipedia.org/wiki/Euler_characteristicIt says that V - E + F = 2. V is number of verts. F is number of faces. E is number of edges. This is true for all convex hulls in 3D.
Given an input array of vertices, say V is the number of verts, you can do:
E = V * 3 - 6 (three edges per triangle, worst case)
F = 2 * V - 4
And finally, assert V - E + F = 2.
This is all in Dirk's lecture:
http://box2d.org/files/GDC2014/DirkGregorius_ImplementingQuickHull.pdfYou can make it easy for yourself to create conflict lists by using double linked lists like this:
struct QHVert
{
Vertex v;
int next;
int prev;
};
Where next and prev are indices of vertices. Personally when I implement this stuff I use circular linked lists. It is just a matter of getting comfortable with data structures and book-keeping at this point
Then you can write code like:
if (InFront(face, vert))
{
AddConflictVert(face.list, vert);
}