Mike_I, ты думаешь не правильно (в данном случае), поэтому ещё раз призову тебя сначала разобраться с материей, прежде чем делать выводы (ошибочные).
Дело в том, что в ф-ю GetCurrentDirectory НЕ передаётся объект CString. Если бы это было так, тогда конечно не надо было бы передавать размер - объект сам позаботился бы о размере своего буфера. А так передаётся указатель типа char, и как же, скажи пожалуйста, через него ф-я GetCurrentDirectory должна управлять объектом CString? Может придумаешь?
А посему повторю ещё раз (в последний - если не поймёшь, я уж и не знаю) - это не проблема объекта CString, а ф-ции GetCurrentDirectory. Ты сам должен позаботиться о размере буфера, как впрочем при работе практически с любой ф-ей API, запрашивающей буфер для ввода данных.
В примере Anchorite указание объекту создать сначала буфер необходимого размера даётся с помощью параметра ф-ции GetBuffer, который он запросил у GetCurrentDirectory, вызвав её с параметром NULL.
А с буфером всё происходит так как я объяснил, а не так как тебе хочется. Ты создаёшь объект strPath и обнуляешь его strPath = ""; Вызови GetLength и убедись, что длинна равна нулю.
Потом ты передаёшь указатель на кусок памяти размером 0 (заключающий нуль я не считаю) в ф-ю и говоришь напиши мне туда 55 байт. Даже если запрашиваемый путь всего 3 символа "c:\" - уже происходит ошибка всех новичков и дилетантов (залог успешной работы всех хакеров) - переполнение буфера. В дебаге ты можешь это и не заметить. Всё! 55 литров пива вылиты в банку с нулевым объёмом. Твоя память в сортире, какие могут быть последствия не скажет тебе никто. Даже ГБ и БГ.
Тебе повезло, что вылетает в след строчке - ошибку сразу видно. У меня подобная ошибка приводила к тому, что сбой происходил в совершенно другом месте, при совершенно другой операции. И найти подобные ошибки в большом проекте ой как тяжело. Так что учи мат. часть.