Автор Тема: C++ i delete[] въпрос  (Прочетена 1723 пъти)

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
C++ i delete[] въпрос
« -: 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.  
« Последна редакция: Feb 05, 2009, 18:12 от sandman_7920 »
Активен

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Re: C++ i delete[] въпрос
« Отговор #1 -: Feb 05, 2009, 18:17 »
Второто.
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: C++ i delete[] въпрос
« Отговор #2 -: 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.  
Активен

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Re: C++ i delete[] въпрос
« Отговор #3 -: Feb 05, 2009, 18:31 »
Няма никаква разлика между

delete [] *dyn

и

delete [] dyn[0]

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

A gentleman is one who is never rude unintentionally. - Noel Coward

sandman_7920

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: C++ i delete[] въпрос
« Отговор #4 -: Feb 05, 2009, 18:38 »
10x
Активен

CappY

  • Напреднали
  • *****
  • Публикации: 72
  • Distribution: Gentoo Linux
  • Window Manager: KDE 4.5.x
    • Профил
    • WWW
Re: C++ i delete[] въпрос
« Отговор #5 -: Mar 21, 2009, 02:56 »
Имам въшпрос относно С++ и по-точно СиТайм библиотеката. Нали библиотеката има функция тайм() която връща изминатото време от 1яну.1970 год до сега в секунди. А има ли функция която връща времето изминало от 1яну.1970 до зададена от мен дата (напр: 24 дек. 2008). Захванал съм се с 1 проект да затвърдя знанията си па и да науча нови, но не мога да намеря еквивалент на тази функция. Или ми трябва нещо просто което изчислява дните изминали между 2 дати ? :) Благодаря за вниманието. :)
Активен

victim70

  • Напреднали
  • *****
  • Публикации: 454
  • Distribution: Gentoo, Ubuntu
  • Window Manager: Kde Xfce
    • Профил
Re: C++ i delete[] въпрос
« Отговор #6 -: 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++ на разбираем език" . Всяка година си я прехвърлям.
Активен

"Господи, дай ми сила да променя нещата които немога да приема,
дай ми търпение да приема нещата които не мога да променя,
и ми дай мъдрост, да правя разликата между двете"

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
delete действа като backspace
Системни настройки
vic_semionov 3 2371 Последна публикация Mar 17, 2005, 14:34
от vic_semionov
KDE 3.4 crash при  Shift+Delete
Настройка на програми
dilyan 0 1067 Последна публикация Mar 29, 2005, 13:38
от dilyan
Прескачане на кошчето при delete
Настройка на програми
cartman 5 2271 Последна публикация Jun 12, 2006, 19:52
от cartman