Мне кажется, тут разница в том, что один подход больше акцентируется на выравнивании структур, а другой — на проверке самих указателей. Первый помогает избежать ошибок из-за смещения памяти, а второй — ловит ситуации, когда указатель просто не указывает никуда. Оба важны, но, если структура COLL сложная, выравнивание становится чуть более критичным.
Ошибка 0x7 в x64 часто выскакивает, когда указатель просто никуда не указывает, а структура COLL где-то потеряла выравнивание. Тут важно не только проверить валидность указателей, но и тщательно сверить формат данных, иначе память съезжает и код рушится. В общем, мелочи с выравниванием и pointer’ами могут дать такую проблемку, даже если остальной код норм.