- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
Matrix matrix ( h, w );
delete &h, &w;
for ( int i = 0; i < h; i++ )
{
for ( int j = 0; j < w; j++ )
{
cout << "Введите элемент [" << i << ", " << j << "]: ";
cin >> matrix[i][j];
}
}
int h, w; ?
Подумайте, нужен ли вам C++. Хорошо подумайте.
Ты преувеличиваешь его вину. Он не удалял указатели на локальные переменные. И даже не удалял локальные переменные, размещенные по указателю. Он лишь удалил одну локальную переменную, размещеную по указателю.
значит, нужно как-то так
http://ideone.com/qQkD8f
Переплюнул своего препо давателя.
>>то именно это и надо кидать на ГК
Каюсь, грешен! Огромная структура объявлялась в стеке, который неожиданно кончился.
Но ведь это же уныло на 95% - чего УГ постить-то?
У этого даже был какой-то плюс и он эксплуатировался где-то в коде около вызова конструктора. Я вот забыл. Подумаю - может вспомню и отпишусь.
Use-after-free что ли?
Да тут вообще что-то странное и необычное происходит... То ли освобождение автоматической переменной, что маловероятно. То ли указатель на инт (причем, видимо, ради удобства обращения к инту сконверченный в ссылку), необходимость которого тоже трудно объяснить.
Для полного понимания кода реквестирую у ОП'а описание h и w и их инициализации.
Совсем там накурились?
main.cpp:34:12: error: type ‘int’ argument given to ‘delete’, expected pointer
delete h, w;
нате!
Найди его и ударь ему в бубен!
А если сам придумал, то бросай С++ и иди в гуманитарное направление. Напр, в абстрактную живопись :)
Как можно прочитать о delete, но не прочитать о new и вообще о том, что такое куча?!
P.S. Сам я учил плюсы после паскаля, и уже имел представление о куче.
> он для ссылок
в тундру
Ну вот в том и прикол - про то, что delete есть прочитали, а про то, зачем он юзается, однозначно нет. Хотя есть возможность, что проблема не в вас, а в туториале.
P.S. Почитайте лучше вместо туториалов нормальную книжку. Шилдт вроде-бы неплохую написал. Ну и The C++ Programming Language от автора крестов.
Ничего личного. Просто заебала уже эта ситуация, когда новички начинают учить язык по туториалам. Вы не первый, и не единственный, кто попался на эту удочку ;(
По туториалу, имхо, можно изучать основы языка только тем, кто как минимум пару языков полноценно осилил, и для него динамическая память, GC, исключения, классы, указатели, основные структуры данных, приемы разработки и т.п. уже не являются чем-то новым.
И самое плохое в туториалах то, что зачастую их пишут нубы, не разобравшиеся в проблеме. В духе "Написал тут на днях связный список, пойду учебную статью на хабре запилю".
P.S. Подкиньте ссылочку на ваш туториал, плиз.
> ПХП, конечно, не такой высокоуровневый язык
Да PHP повыше уровнем будет, чем c++. Но не скажу, что проще.
Это в си нет, там есть только строковые литералы, но не строки. А в крестах есть вполне полноценный класс.
А тут смотря с какой точки зрения смотреть.
Встроенного типа "строка" там действительно нет. Но есть в стандартной библиотеке класс std::string, и есть строковый литерал, который на самом деле просто сахарок для массива из конст чаров.
Поэтому строки в крестах и есть и нет ;)
Я об этом и говорил)
> кажется я это в умной книжке по плюсам читал
я тоже читал эту откровенно пессимистическую статью-перевод с хабра, но искать мне её лень.
А теперь забыл?)
>не такой высокоуровневый язык, но тем не менее я в этом шарю
Плюсы - они универсальные. На них все пишут - от дров до корпоративных приложений. И за универсальность приходиться платить порогом вхождения. Шарить в ПХП и шарить в плюсах - небо и земля.
Кстати пхп многие считают быдлоязыком. На самом деле репутацию языка составляют кодеры, так уж повелось, что на пхп кодят в основном не совсем адекватные личности. Многие считают, что плюсы таки излишни - достаточно знать си и Java. Я к тому, что, раз есть такие проблемы как use-after-free, то есть проблемы и с ООАиП и ООП. Может пока стоит теорию почитать да си подучить? Наскоком все и сразу вряд ли дастся.
Ну сейчас корпоративщики все-таки уходят в сторону жабы\шарпа. А дрова, емнип, они всегда на си без плюсов, ибо ядерный рантайм совсем не такой, как в юзерленде.
Вот и остаются для крестов игрушки да сервера, в которых требуется производительность, которую ява/шарпик/питон не вытянут, а на сишке пилить будет неудобно... Ну и legacy проекты, которые уже на с++ начаты.
> Многие считают, что плюсы таки излишни - достаточно знать си и Java.
И не без оснований ;)
Что вполне логично - удобнее же.
>А дрова, емнип, они всегда на си без плюсов, ибо ядерный рантайм совсем не такой, как в юзерленде.
У меня знакомый работает в конторке по написанию софта usb устройств, микроэлектроники и всякого такого, и он говорил, что весь код на плюсах (ибо без ооп хреновенько)
>Вот и остаются для крестов игрушки да сервера
Игрушки игрушкам рознь. Под андроиды игры часто на жабе пишут, да и времяубивалки все равно
не чем писать зачастую. Понятно, что движки от всяких крайзисов на плюсах писаны - ибо и производительность нужна и хорошая поддержка кода.
> И не без оснований ;)
Тут еже можно вспомнить былинные холивары - плюсы али жаба. В итоге языки заняли свои ниши и мирно сосуществуют. И шарпик между ними.)
Не ну на самих контроллерах кресты юзают. И в софте для управления тоже. А вот именно в дровах для линуха или винды - чет очень сомнительно. Хотя могу ошибаться ;)
Друг сказал что дрова тоже на плюсах, я сам удивился, ибо все-таки си достаточно
Нужно поотключать. Иначе придется писать несколько функций по их поддержке. new/delete тоже придется самому пильнуть.
О стандартной крестолибе всяко придется забыть, ну разве что шаблонные классы будут работать.
> Получится эдакий Си с классами.
А так ли нужны там классы?
Ну и пара вопросов:
1) вы о винде или о линухе?
2) писали ли вы дрова на плюсах сами, попадались ли вам дрова, написанные, на них (если да, то есть ли линк?), или же это просто рассуждения?
Классы - это удобно. А если есть возможность - почему бы и нет?
Стильно, модно, молодежно!
Там что важно есть женешаблоны, коих в сишке нету.
ООП при работе с usb весьма полезно, даже в ядре линупса оно в стиле ООП сделано, хоть и на голой сишечке.
Плюсы сами по себе тоже интересны, в основном из-за шаблонов и широких возможностей дизайна. Ну и просто хорошая школа жизни...
Дай дураку register_globals, он себе голову отпилит.
"Два фермера напившись виски(ну или чего там бухают
ковбои) начали спорить,кто из них самый смелый.Началось с
банальностей,во время спора швырялись мороженной репой.Этого было мало и
один из них с криком "смотри какой я крутой",взял бензопилу и отпилил
себе ступню.Другой,не долго думаю,типа "ты лох,вот я круче тебя" отобрал
пилу и одних махом отпилил себе голову.В Америке настолько суровые
фермеры,что на спор отпиливают себе башку..."
Двоичная куча, 2-3 куча, Биномиальная куча, Фибоначчиева куча.
Зазубриваешь и пытаешься понять что это такое, а затем реализовать.
Раньше чем изучишь - тебе в программировании делать будет нечего.
Потом гуглишь
Куча память.
Не сладкая жизнь у пограммистов
"Куча-куча ты могуча,
но ужастна и говнюча,
Отпусти через делЕт
то, что new отдал тебе"
И, если тебе повезет, куча отпустит. И тебя тоже отпустит. А вообще - луркани хотя бы вики. Это конечно не тот ресурс для нужно учиться прогать, но когда знаний нет совсем - тоже сгодится
З.Ы.: пасяп за столь понятное объяснение :D
Читай умные книжки
Сначала покажите мне официальный кресто-туториал ;) Интересно было бы полистать.
Ну как бы да ;) Вот эта куча г.. http://govnokod.ru/10011 была написана как раз в то время.
Понимаешь, да, людям свойственно ошибаться, не понимать чего-то во время обучения. Но не в таких масштабах. Я представляю, если бы ты учился на медицинском и тебе на практике пришлось бы ставить капельницу, а ты бы руку пациенту отрезал. Потом бы оправдывался, что читал туториал, но не обратил внимания, что руку в других случаях отрезают?
Ага, представляю - студент медухи поучаствовал в своей первой операции (в лучшем случае ставя зажимы и убирая кровь, ничего более серьезного ему не доверили), и пошел писать на хабре статью о том, как делаются операции, а другие "хирурги", начитавшись этой статьи пошли пользоваться этой статьей как руководством. Нонсенс? Да. Но в IT, к сожалению, именно так и делают.
http://www.mojbred.com/files/20060917/Kurjezy_Vojennoj_Mediciny.htm
Читаем второй рассказ "Автономный Аппендицит" :)
P.S. Сборник не рекомендуется читать за едой и перед сном.
Спасибо, закинул на читалку.
http://www.youtube.com/watch?v=65meByViGZs
Огромное спасибо.
- delete[] применяется только к указателям на массив, запиленный при помощи new[].
- free применяется только к указателям на блок памяти, запиленный с помощью malloc/realloc.
Автоматические переменные аля int h, w; удалять не нужно. Аргументы функций и глобальные переменные тоже.
или
?
P.S. Главное чтобы по моим крестоблядским шедеврам никто не учился писать код ;)
Реально жалко этих людей)
то второе правильнее.
P.S. Стоп. Приоритет у delete сильнее, чем у запятой. Значит только так: Или так: А в вариантах LispGovno действительно похер, "удалит" первую.