Я устраняю неисправность некоторого кода, который приводит к сбою одного приложения. Cra sh происходит позже в приложении после его кода. Может быть, утечка памяти или что-то подобное? Я прослеживаю это до следующей функции:
function GetTempFileName: String;
const
DOC_REGISTER_PREFIX = 'DR';
var
NameBuffer: array[0..MAX_PATH] of char;
PathBuffer: array[0..MAX_PATH] of char;
begin
FillChar(NameBuffer, MAX_PATH, 0);
FillChar(PathBuffer, MAX_PATH, 0);
GetTempPath(SizeOf(PathBuffer), PathBuffer);
Windows.GetTempFileName(PathBuffer, DOC_REGISTER_PREFIX, 0, NameBuffer);
Result := NameBuffer;
end;
Функции работают, и возвращается временное имя файла, но это заставляет приложение обработать sh по некоторым причинам после перехода к функциям вызывающей стороны. После некоторого тестирования и сравнения с другими аналогичными функциями в Интернете, я обнаружил, что если я изменяю порядок между PathBuffer и NameBuffer при использовании GetTempPath и GetTempFileName, все работает как положено.
function GetTempFileName: String;
const
DOC_REGISTER_PREFIX = 'DR';
var
NameBuffer: array[0..MAX_PATH] of char;
PathBuffer: array[0..MAX_PATH] of char;
begin
FillChar(NameBuffer, MAX_PATH, 0);
FillChar(PathBuffer, MAX_PATH, 0);
GetTempPath(SizeOf(NameBuffer), NameBuffer);
Windows.GetTempFileName(NameBuffer, DOC_REGISTER_PREFIX, 0, PathBuffer);
Result := PathBuffer;
end;
Есть ли какое-либо объяснение этому