Не могу найти, где находится утечка памяти в функции - PullRequest
0 голосов
/ 25 января 2012

У меня проблема с выявлением утечки памяти. Я попробовал инструменты, и он говорит, что при каждом вызове функции, описанной ниже, происходит утечка памяти.

CFStringRef getStringFromLocalizedNIB(int cmdId)
{
    IBNibRef        nibRef;
    WindowRef       wind=NULL;
    CFStringRef     alertString;

    CreateNibReference(CFSTR("main"), &nibRef);
    CreateWindowFromNib(nibRef, CFSTR("Localized Strings"), &wind);
    DisposeNibReference(nibRef);

    ControlID   alertID = {'strn',cmdId};
    ControlRef  alertRef;
    GetControlByID(wind, &alertID,&alertRef);
    GetControlData(alertRef, kControlNoPart, kControlStaticTextCFStringTag, sizeof(CFStringRef), &alertString, NULL);
    return alertString;
}

Каждый раз, когда я вызываю функцию, я освобождаю возвращенный объект.

CFStringRef lstr;
lstr = getStringFromLocalizedNIB(20);
//Use lstr;
CFRelease(lstr);

Так может кто-нибудь объяснить, где утечка?

1 Ответ

0 голосов
/ 25 января 2012

Если я правильно понимаю, вы не показываете окно, созданное с помощью CreateWindowFromNib (). Я ожидал бы, что окно будет иметь углеродный эквивалент release-on-close, а CreateWindowFromNib () будет сбалансирован с помощью ShowWindow (). Я не делал Carbon уже 9 лет, так что я не уверен.

Попробуйте вызвать DisposeWindow () по ветру, чтобы сбалансировать создание:

    ...
    DisposeWindow(wind);
    return alertString;
}
...