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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статические переменные, Статический указатель? :) 
:(
    Опции темы
Doc_d0s
  Дата 21.2.2005, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 3



Вот кусок кода функции ввода текста из файла:
Код

char* EnterText(char s[])
{
 FILE*f;
 unsigned long k;
 static char *a;
 char *a1;
 if((f=fopen(s,"r"))!=NULL)
 {
  k=filesize(f)+1;
  if(filesize(f)==0)
   dataEr;
  fseek(f,0,SEEK_SET);
  a=new char[k];
  a1=a;
  for(unsigned int i=0; i<k-1;i++)
  {
   *a1=fgetc(f);
   a1++;
  }
  *a1='\0';

 
  fclose(f);
 }
 else
 {
  FileEr;
  exit(0);
 }
 return a;
}


Внимание вопрос: Когда функция закончит свою работу память, которую я выделил и поставил в начало указатель будет в моей власти? smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
JackYF
Дата 21.2.2005, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Да. Только и освобождать память придется тебе тоже самому smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
srd
Дата 22.2.2005, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

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



Осталось только догадаться, зачем ты сделал указатель статическим. Здесь это совершенно бесполезно.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Doc_d0s
Дата 22.2.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 3



Цитата

Осталось только догадаться, зачем ты сделал указатель статическим. Здесь это совершенно

Так Надо smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Hroft
Дата 25.2.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это для повышения производительности, наверное. Чтобы при каждом запуске функции не выделялась память под указатель smile. Кстати, это действительно будет давать прирост производительности для нетривиальных типов, как вы считаете? Извиняюсь за второй вопрос в теме.
PM MAIL ICQ   Вверх
bel_nikita
Дата 25.2.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



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



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 25.2.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата(Hroft @ 25.2.2005, 07:34)
Это для повышения производительности, наверное. Чтобы при каждом запуске функции не выделялась память под указатель


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



Это сообщение отредактировал(а) Fantasist - 25.2.2005, 19:46


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Doc_d0s
Дата 25.2.2005, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 3



Люди объясните все таки, блок памяти после завершения работы ф-ии остается за указателем, или переходит во владение системы ? smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Fantasist
Дата 25.2.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

Репутация: 4
Всего: 41



Цитата(Doc_d0s @ 25.2.2005, 17:25)
Люди объясните все таки, блок памяти после завершения работы ф-ии остается за указателем, или переходит во владение системы ?



Брр... Какие-то ты не понятные термины используешь. Блок памяти никогда не остается за указателем - это просто блок памяти, указатель на него может указываеть (а может и не указывать а может указывать и на середину блока). С точки зрения програмииста, в первом прибледежении, блок памяти может быть выделенным для его программы или не выделенным. Все блоки памяти которые были выделенны твоей программе с помощью вызова new должны быть освобожденны тобой вызовом delete. Иначе блок памяти никогда не будет возвращен мэнеджеру памяти.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
Doc_d0s
Дата 25.2.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 3



Fantasist : Пасиьа ты открыл мне глаза,
з.ы. А в маине я всё же освобождаю память smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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