Управление памятью с помощью const char * и al_get_native_file_dialog_path()

Я использую библиотечную функцию, которая возвращает переменную const char *. Ниже приведен код:

if (something) {
     const char* file = get_filename();
     save(file);
}

Нужно ли освобождать файловую переменную внутри блока, поскольку она находится в блоке?

Я использую функцию al_get_native_file_dialog_path() из библиотеки allegro 5.

Я пытался найти любую документацию о том, как распределяется переменная const char *, но ничего.


person ventur65    schedule 24.05.2016    source источник
comment
Как была выделена строка?   -  person Some programmer dude    schedule 24.05.2016
comment
Вам нужно проверить документацию библиотеки о том, как управлять возвращаемым указателем. Никто здесь не знает вашу библиотеку.   -  person SergeyA    schedule 24.05.2016
comment
Что говорится в документации для get_filename?   -  person NathanOliver    schedule 24.05.2016
comment
вы должны спросить автора(ов) get_filename. Невозможно сказать, просто взглянув на код вызова   -  person pm100    schedule 24.05.2016
comment
@ventur65 Ну, по крайней мере, вы можете узнать, была ли эта память выделена динамически и утекает без удаления, с помощью такого инструмента, как valgrind.   -  person πάντα ῥεῖ    schedule 24.05.2016


Ответы (1)


Нужно ли освобождать файловую переменную внутри блока, поскольку она находится в блоке?

Указатель (const) внутри блока с областью действия по-прежнему остается просто указателем.

Никаких специальных действий не предпринимается (например, для автоматического освобождения памяти, на которую он указывает), когда область видимости остается.

Таким образом, мы не можем на самом деле сказать, если не знаем, как этот указатель был выделен

const char* file = get_filename();

Это может быть что-то вроде

const char* get_filename() {
    static const char* hardcoded_stuff = "TheFileName.txt";
    return hardcoded_stuff;
}

or

const char* get_filename() {
    const char* filename = new char[MAXFILENAME];
    // ... determine and initialize filename ...
    return filename;
}

Первая версия не требует освобождения памяти со стороны клиента, а вторая требует.


Я использую библиотечную функцию...

Указывает, что вы используете код, который не находится под вашим контролем. Таким образом, вы должны посетить документацию этой библиотеки или спросить авторов.


Я пытался найти любую документацию о том, как выделяется переменная const char *, но ничего.

Вы проверили их пример в документации?

Я не нашел никакого кода для освобождения указателя, полученного с помощью al_get_native_file_dialog_path().

person πάντα ῥεῖ    schedule 24.05.2016
comment
Я использую функцию al_get_native_file_dialog_path() из библиотеки allegro. Я пытался найти любую документацию о том, как выделяется переменная const char *, но ничего. - person ventur65; 24.05.2016
comment
@ventur65 Если вы посмотрите на источник , вы можете видеть, что al_get_native_file_path() возвращает указатель на поле диалога. Диалоговое окно сохранит право собственности на путь. - person joelw; 24.05.2016