Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: sandman_7920 в Feb 05, 2009, 18:05



Титла: C++ i delete[] въпрос
Публикувано от: sandman_7920 в Feb 05, 2009, 18:05
Код
GeSHi (C++):
  1. int W=9,H=10;
  2. char **dyn=new char*[H];
  3. for (int i=0; i<H; i++) dyn[i]=new char[W];
  4.  
  5. delete [] *dyn;
  6. delete [] dyn;
  7.  
  8. /* И тук е въпроса това правилно освобождаване на паметта ли е или трябва да е: */
  9. for (int i=0; i<H; i++) delete [] dyn[i];
  10. delete [] dyn;
  11.  


Титла: Re: C++ i delete[] въпрос
Публикувано от: tarator в Feb 05, 2009, 18:17
Второто.


Титла: Re: C++ i delete[] въпрос
Публикувано от: sandman_7920 в Feb 05, 2009, 18:24
Код
GeSHi (C++):
  1.  
  2. int W=9,H=10;
  3. char **dyn=new char*[H];
  4. for (int i=0; i<H; i++) dyn[i]=new char[W];
  5.  
  6. delete [] *dyn;
  7. delete [] dyn[0];// Това тук е за тест: *** glibc detected *** ./t: double free or corruption (fasttop): 0x0804a038 ***
  8.                        // Това не означава ли че delete [] *dyn; е успяло правилно да освободи паметта
  9. delete [] dyn;
  10.  


Титла: Re: C++ i delete[] въпрос
Публикувано от: tarator в Feb 05, 2009, 18:31
Няма никаква разлика между

delete [] *dyn

и

delete [] dyn[0]

И двете освобождават масива сочен от dyn[0].


Титла: Re: C++ i delete[] въпрос
Публикувано от: sandman_7920 в Feb 05, 2009, 18:38
10x


Титла: Re: C++ i delete[] въпрос
Публикувано от: CappY в Mar 21, 2009, 02:56
Имам въшпрос относно С++ и по-точно СиТайм библиотеката. Нали библиотеката има функция тайм() която връща изминатото време от 1яну.1970 год до сега в секунди. А има ли функция която връща времето изминало от 1яну.1970 до зададена от мен дата (напр: 24 дек. 2008). Захванал съм се с 1 проект да затвърдя знанията си па и да науча нови, но не мога да намеря еквивалент на тази функция. Или ми трябва нещо просто което изчислява дните изминали между 2 дати ? :) Благодаря за вниманието. :)


Титла: Re: C++ i delete[] въпрос
Публикувано от: victim70 в Mar 21, 2009, 12:21
Има функция която преобразува, година,месец,ден,час,минута,секунта в long казва се mktime
unsigned long mktime(const unsigned int year, const unsigned int mon,
                             const unsigned int day, const unsigned int hour,
                             const unsigned int min, const unsigned int sec);

А примера с указател към масив от указатели не е добър за използване в програма - обикновенно го дават като лош пример за стил на програмиране. По добре използвай масив от указатели към структура, или опашка/стек от структура (предполагам че става въпрос за поредица от текстови съобщения). По този начин направено е приемливо като стил за Java и PHP.
Препоръчвам ти "C++ на разбираем език" . Всяка година си я прехвърлям.