Здравствуйте, Tom, Вы писали:
Посмотрел повнимательней — похоже Вы правы. В случае когда память выделяет клиент, он должен передать в функцию не просто указатель на буффер, а еще также и максимальный размер, что мы и видим в 1-м случае:
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = sizeof(buffer) - sizeof(SYMBOL_INFO) + 1;
С другой стороны, в IMAGEHLP_LINE64 нет поля для максимального размера, и соответственно мы не можем в функции SymGetLineFromAddr64 безопасно работать с буффером, если его выделит клиент.
Насчет того, должен ли клиент освобождать буффер или он просто получает доступ к строке которая в любом случае где-то хранится, я думаю можно провериить, возврашаются-ли при двух вызовах SymGetLineFromAddr64 разные адреса (тогда _может_ _быть_ можно удалять), или один и тот-же (тогда точно нельзя).