Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Статические переменные


Автор: Doc_d0s 21.2.2005, 21:43
Вот кусок кода функции ввода текста из файла:
Код

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

Автор: JackYF 21.2.2005, 23:59
Да. Только и освобождать память придется тебе тоже самому smile

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

Автор: Doc_d0s 22.2.2005, 19:09
Цитата

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

Так Надо smile

Автор: Hroft 25.2.2005, 10:34
Это для повышения производительности, наверное. Чтобы при каждом запуске функции не выделялась память под указатель smile. Кстати, это действительно будет давать прирост производительности для нетривиальных типов, как вы считаете? Извиняюсь за второй вопрос в теме.

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

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


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


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

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



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


Автор: Doc_d0s 25.2.2005, 21:59
Fantasist : Пасиьа ты открыл мне глаза,
з.ы. А в маине я всё же освобождаю память smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)