Как получить хороший HeapFree? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть глобальная переменная с именем wszBuffer I HeapAlloc в функции (someFunc()) и HeapFree в другой функции (anotherFunc())

В основном я вызываюфункции, но когда я смотрю на переменную после вызова anotherFunc()

, в ней есть какой-то мусор и некоторые значения моей другой переменной HeapAllocated

Примерно так:

enter image description here

Но если я позвоню anotherFunc_with_return() вместо вызова anotherFunc(), то все в порядке

Но я не хочу иметь возвращаемое значение в функции

Есть предложения?

Пример кода:

// Global
LPWSTR wszBuffer;

VOID someFunc()
{
    DWORD dwSize = 0;
    // doing somthing and calculate dwSize...
    wszBuffer = (LPWSTR) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);
    // continue...
}
VOID anotherFunc()
{
    // do somthing with wszBuffer and then free it
    if (wszBuffer != NULL)
    {
        HeapFree(GetProcessHeap(), NULL, wszBuffer);
        wszBuffer = NULL;
    }
}

LPWSTR anotherFunc_with_return()
{
    // do somthing with wszBuffer and then free it
    if (wszBuffer != NULL)
    {
        HeapFree(GetProcessHeap(), NULL, wszBuffer);
        wszBuffer = NULL;
    }
    return wszBuffer;
}

int main()
{
    someFunc();
    anotherFunc(); // It's not good

    // It's OK 
    wszBuffer = anotherFunc_with_return();

    return 0;
}
...