- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
int** delete_row(int** arr, int &row_count, int n)
{
delete arr[n-1];
for (int i = n-1; i < row_count-1; i++)
{
arr[i] = arr[i+1];
}
arr[row_count-1] = NULL;
delete arr[row_count-1];
row_count--;
return arr;
}
Факт. Пока продерешься через все эти операторы * и -> от смартпоинтеров...
нет
> STL затрудняет отладку
потому что с STL ты сразу корректные программы писать начинаешь, и отлаживать становится нечего?
Закопайте отладчик, пишите юнит-тесты. Я плюсовый отладчик запускаю раз в полгода чтобы в coredump поковыряться.
ничего себе, я не знал что кто-то правда так делает
ты может и тесты пишешь ПЕРЕД кодом?
Я слишко часто об этом забываю, поэтому после каждого зелёного теста приходится стэшить изменения в коде, убеждаться, что тест падает, а потом накатывать изменения обратно.
Была тулза которая меняла выражения в случайных местах кода (добавляла отрицание) и проверяла что какой-то тест упадет.
Я уже лет 5 пишу программы, которые работают на другом конце света, и которые крэшатся, если минуту на хартбиты не отвечают. Какой мне толк от отладчика?
Отладчик я только в Emacs используют, чтобы понять, какой мудак мне в глобальную переменную срёт (я застукал тебя, сраный убогий haskell-mode).
Всмысле понимать кто каким объектом владеет, вместо того чтобы делать delete в случайном порядке?;)
>> не до конца понимаешь
А у тебя легаси кода не бывает чтоль? Ну там вот тебе шмоток из чужого кода, надо что-то починить, а как оно работает -- хз
Дебаггер не нужен, трассировщик изредка бывает полезен, если знаешь что искать, но практика показывает, что быстрее разобраться в коде, чем в портянке трейсов.
Ты кстати как, от Erlang-а не плюёшься?
Уже не особо. Это практичный нишевой язык с ограниченным, но продуманным набором ортогональных фич. Это не kitchen sink модных баззвордов (в отличие от С++) и не kitchen sink диссертаций в отличие от Haskell.
+там один из лучших рантаймов для работы с IO и сетью, что я встречал. Недавно сам был нимало удивлён как быстро схаченная на коленке P2P приблуда нам раскатывает по кластеру терабайты данных. Буквально на порядок быстрее transmission и обмазанного по уши boost::asio libtorrent.
выпускник ылитного вуза, у вас русского не было?
у нас только на вступительном.
пишите — императив, пишете — множ. число настоящего времени.
Хоть на что-то ты годишься — грамматические ошибки находишь.
А еще там не бывает природоведения, чтения, письма и труда
Кстати, русский язык бывает в техникумах, куда дети идут после 9 класса. Там в первый год впихнут 10-11 класс школы. Кажется, и в ПТУ такое бывает.
У нас, например, была куча предметов вроде культурологии, социологии, психологии, зато один из профильных предметов прочитать забыли. Да, тупо забыли поставить в расписание. Один препод согласился прочитать нам этот предмет экспресс-курсом за месяц до дипломной работы.
А у студентов, обучающихся по специальности «Проектирование микропроцессоров», вообще был предмет «История мировых религий».
Причем вышки нужны две: одну для merge, другую для rebase
А сосоноль в каком вузе пороходят?
или сосоноли это для прыщей, а настоящие программисты юзают хуй?
Да, я помню, весело ьогда было...
http://img0.joyreactor.cc/pics/post/-4290268.jpeg
PHP в ВУЗах
Именно поэтому...
И именно
В ВУЗе должны изучать Notepad++, а не всякую ненужную хуйню типа теории категорий
https://www.adobe.com/devnet/photoshop/scripting.html
Ну да, гимп же гну
А гну это Столлман
А Столлман это емакс LISP
http://cdn.mcstatic.com/contents/videos_screenshots/1162000/1162955/preview.jpg
У него есть некая внутренняя веб-мордочка с минимумом JS.
tsar
Часть тестов невозможно отнести ни к unit, ни к интеграционным, ни к фунциональным.
Все смешалось в доме еблонских
Обычные юнит-тесты пишешь. Есть у тебя, к примеру, класс "Service", который запускает отдельный поток, и у которого есть Stop() и Start().
TSAN будет проверять, что ты там рейс-кондишенов не наплодил.
Специальных тестов для него мы не пишем.
>>новые требования по функционалу в них не отражены
попрошу бизнес-аналитика переписать .feature файл)
>>Потом ты на них тупо забьешь.
Я по той же причине одежду не стираю: всё равно испачкается
Это меньше примерно в полтора раза, чем Буткемп за свое Джаваскрипт получает
delete[] arr[i];
а не
delete arr[i];
Вместо цикла можно впендюрить memmove, ну и, конечно, самый разумный способ реализовать желаемое — использовать вектор векторов
гипотетически можно представить платформу где указатель маленький, а инт большущий
ну, нет:) представь себе некую систему где INT занимает гигабайт. Зачем делать из них массив, когда можно сделать просто массив указателей?
Это бред конечно в случае int, но для структур это вполне реально.
>>cache locality
Это правда, ведь рядышком у нас только указатели, а не данные
Теперь я не понимаю почему вообще работает мой код. Я котел освободить память на которую указывает a[k-1], а потом сделать так, чтобы a[k-1] указывал на ту же строку, что и a[k] .
Бывший питонист или жсник что ли?
Ну указатели ты вроде правильно перезаписал, просто память криво освободил, и аллокатору теперь может крышу снести в самом неожиданном месте.
Да просто утечка, удаление null'а даже не UB.
при чём тут удаление null'а? он результат new[] передаёт в delete, а не в delete[].
From the standard (5.3.5/2) :
In the first alternative (delete object), the value of the operand of delete shall be a pointer to a non-array object or a pointer to a sub-object (1.8) representing a base class of such an object (clause 10). If not, the behavior is undefined.
In the second alternative (delete array), the value of the operand of delete shall be the pointer value which resulted from a previous array new-expression. If not, the behavior is undefined.
-- https://stackoverflow.com/questions/4255598/delete-vs-delete
Первую запятую убрать, вторую заменить на дефис
Какое же всё таки унылое гуано, этот Ваш c++. То ли дело php Pascal.
Получается, что я удалил указатель, а потом заставил ссылаться на другую область памяти. Как такое возможно? Я же его уже удалил(delete arr[n-1]).
А delete[] каждому элементу массива позовёт деструктор.
Причем Clang даже ворнинг выписывает сразу:
1. Watcom C++. s/__PRETTY_FUNCTION__/__FUNCTION__/, s/auto/Destroyable/
Выводит:
2. Digital Mars. Патч такой же. Работает так же, как Watcom.
3. Borland C++. Патч похожий (не знаю, чем заменить __PRETTY_FUNCTION__, читать хелп лень).
После вывода имени функции падает.
4. MSVC. Патч, как в первых двух примерах.
Выводит только первую строку. Три минуса выводить не хочет (т. е. что-то молча завершает программу, даже не сообщив об ошибке).
5. Intel C++. Оригинальный исходник (с auto и __PRETTY_FUNCTION__).
Выводит только первую строку, как и после MSVC.
еще есть boost::matrix
А вот с вершенконтролем хуже..
>>студенты с инженерных и прочих тех. специальностей, где программирование не основной,
или
>>>в некоторых университетах где учат на программистов
С++ за каким-то хуем дают вообще левым людям, включая чуть-ли не социологов! Зачем им это надо -- ума не приложу. Если они и будут что-то где-то скриптовать от уж явно не на С++
Чтобы поняли, что программисты не просто так зарплату получают. На каком-нибудь "PHP" это сделать не выйдет.
У нас был препод математик на факультете, защитивший кандидатскую по какой-то там ненужной абстрактной хуйне в вакууме. Потом эту самую хуйню поставили нам "спецкурсом". Надо же было чем-то его занять.
ого) а cvs застал? а rccs?
>>Svn как по мне лучше потому что нумерация последовательная.
Да, ревизии там последовательные, а у гита -- хеши, потому что он распределенный
Что нахуй не нужно на локалхосте, правда?
>--
Вы заебали, поставьте себе уже автозамену.
————————————————————————————————————————————————————————————————————————————————————————————————————
да, но может понадобиться если ты решишь поделиться с кем-то. С svn это будет сложнее, а с гитом просто добавишь ремоут в пустой удаленный реп и push --force.
У svn же ревизионирование на уровне коммитов, а не файлов (как у cvs/rcs?).
Если да, то я согласен что это имеет некоторый смысл.
Впрочем, для сорьтировки достаточно даты, а для отмечания важных коммитов отлично подойдут таги, которые есть и в гите, и в svn.
Зато бранчеваться у гита проще;)
Бранчеваться на локалхосте?
>У svn же ревизионирование на уровне коммитов, а не файлов (как у cvs/rcs?).
Естественно
Вай нот? Хотя можно и тупо скопировать каталог.
А кто такой " разработчик на локалхосте"?
Человек, чьи веб-приложения работают только на его локалхосте?
Затем я хочу научить ее еще и пиццу заказывать, но это работы на 4 дня.
Если я буду писать прямо в главном бранче то я сломаю утилку. Как-бы мне сделать так, чтобы работу можно было вести как-бы параллельно, не ломая мастер и не теряя изменения?
Придумал! Мне нужен фича бранч
Или пока не было необходимости узнавать>?
Чтоб тебе потом мерджить, ребейзить и черрипикать из шести папок сразу
да, с бранчами
>>спокойно гуглится клонирование репозитория
да, но с гитом проще
>>Бранчеваться на локалхосте?
а что такого?
Там где-то есть такое место:
?
> delete arr[row_count-1];
Интересно, догадается ли компилятор оптимизировать? (выкинуть delete)
https://gcc.godbolt.org/z/KPmZmd
P.S. Хотя шланг творит что-то сложное:
https://gcc.godbolt.org/z/cR1yDh