Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> address of local variable, как избежать address of local variable ? 
:(
    Опции темы
admsasha
Дата 24.4.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(chipset @ 25.4.2005, 00:03)
Данные то она отдает разные но значение указателя одинаковое, ибо static char.

так я не понял, p и pp одинаковые значение имеет или нет ?

Цитата(chipset @ 25.4.2005, 00:03)
Тогда нафига тебе вообще что-то возвращать?

что бы получить результат, только в одну переменную не во всех переменных которые вызывали эту функцию
PM MAIL WWW ICQ Jabber   Вверх
chipset
Дата 24.4.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



Цитата(admsasha @ 24.4.2005, 07:07)
так я не понял, p и pp одинаковые значение имеет или нет ?

Да. Потому что ты возвращаешь значение указателя а оно у тебя одинаковое всё время, static оно..

Цитата(admsasha @ 24.4.2005, 07:07)
что бы получить результат, только в одну переменную не во всех переменных которые вызывали эту функцию

Fire-plug уже ответил тогда smile



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
admsasha
Дата 24.4.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(bel_nikita @ 17.4.2005, 22:59)
char *proba(void){
    char* tmp = new char[2048];
    strcpy(tmp,"reer");
    return tmp;
}


при этом, будет каждый вызов будет независемый ?
т.е. каждый char[100]=proba(); будет получать свои данные, и не менять даже при выдачи функцией разные данные ?
PM MAIL WWW ICQ Jabber   Вверх
chipset
Дата 24.4.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



Вроде бы да smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
admsasha
Дата 24.4.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



ну всё, всем спасибо... сознаюсь что не доконца все понял, но буду делать так как написал, мож дойдет когда либо...

рад что есть форумы, где можно получить ответ на заданный вопрос, а не получить мат в свою стороны, за его использование smile
PM MAIL WWW ICQ Jabber   Вверх
chipset
Дата 24.4.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



А что собственно непонятного? smile
Так как ты написал в самом начале - память выделяется на стеке функции, это значит что переменная самоуничтожится при выходе из области - конце функции.
Так как написали - память выделяется из кучи, что означает то, что память не уничтожится пока ты явно это не сделаешь.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
maxim1000
Дата 24.4.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



кстати, совсем забыл
есть еще такой метод:
Код

char *func(int n)
{
  static char result[100];
  if(n==0)
    return "qqq";
  else
    return "www";
}

smile
не буду нарушать традицию - у него тоже есть недостаток smile
вот такое лучше не писать:
Код

char *p;
p=func(0);
p[1]='a';//лучше не писать именно вот эту строчку

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


--------------------
qqq
PM WWW   Вверх
Void
Дата 25.4.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(maxim1000 @ 24.4.2005, 22:32)
но если результат функции нужен только для чтения - самый простой способ smile

Так почему же тогда просто не объявить ее с сигнатурой const char*, чтобы избежать такой ситуации? smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
maxim1000
Дата 25.4.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
Так почему же тогда просто не объявить ее с сигнатурой const char*, чтобы избежать такой ситуации?

просто изначально в вопросе был пример без модификатора const


--------------------
qqq
PM WWW   Вверх
Fire-Plug
Дата 26.4.2005, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2005

Репутация: -1
Всего: 0



Все обсуждения даной темы не имеют смысла, покуда задавший вопрос не поймет, что ему собственно нужно, т.к. создается впечатление, что все вышеприведенные рекомендации лично автора вопроса не удовлетворили.
Цитата(admsasha @ 24.4.2005, 17:23)
при этом, будет каждый вызов будет независемый ?
т.е. каждый char[100]=proba(); будет получать свои данные, и не менять даже при выдачи функцией разные данные ?

Кто-то может дать определение, что такое "независимый вызов"?
ЗЫ: Фраза явно напрашивается, чтобы ее передали С.Альтову (или М.Задорнову, или А.Иванову) для
размешения в рубрике "Что бы это значило".
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 26.4.2005, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



Разьясняю.
Цитата(Fire @ 25.4.2005, 19:28)
Кто-то может дать определение, что такое "независимый вызов"?

Это обозначает то что значение последующих вызовов не будет зависимо от предыдущих.
smile
Цитата(Fire @ 25.4.2005, 19:28)
Все обсуждения даной темы не имеют смысла, покуда задавший вопрос не поймет, что ему собственно нужно, т.к. создается впечатление, что все вышеприведенные рекомендации лично автора вопроса не удовлетворили.

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

Цитата(Fire @ 25.4.2005, 19:28)
ЗЫ: Фраза явно напрашивается, чтобы ее передали С.Альтову (или М.Задорнову, или А.Иванову) для
размешения в рубрике "Что бы это значило".

Надо будет ему сообщить.



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fire-Plug
Дата 2.5.2005, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2005

Репутация: -1
Всего: 0



Цитата(chipset @ 26.4.2005, 05:49)
Разьясняю.

Цитата (Fire-Plug @ 25.4.2005, 19:28)
Кто-то может дать определение, что такое "независимый вызов"?


Это обозначает то что значение последующих вызовов не будет зависимо от предыдущих.

Не люблю примитивной отсебятины.
Для интереса попробуй найти аналогию своему "определению" хотя бы на И-нете. А также найти пример "зависимых вызовов ф-ций".
Возьмем, любую ф-цию, ну, например, CRTL ф-цию strlen(). В каком случае результат ее вызова будет зависеть от предыдущих вызовов, а в каких нет?
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
chipset
Дата 2.5.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



Цитата(Fire @ 1.5.2005, 21:24)
А также найти пример "зависимых вызовов ф-ций".

Рекомендую прочитать ещё раз тему.
Код

int func()
{
static int i = 0;
i++;
return i;
}



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
admsasha
Дата 2.5.2005, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(Fire @ 2.5.2005, 14:24)
также найти пример "зависимых вызовов ф-ций".

strtok, следующие результаты, могут зависеть, от предыдущих
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.