LINUX.ORG.RU

C++ realloc

 ,


1

1

Потребовалось написать собственный realloc с блекджеком и дамами. Но выскакивает ошибка, которую никак не могу понять.

Упрощенно:

void resize(char* array, int &bufsz) {
 bufsz += 10;
 char* temp = new char[bufsz];
 for (int i = 0; i < bufsz - 10; i++) { 
  temp[i] = array[i];
 }
 delete[] array;
 array = temp;
}

Но эта функция портит массив, когда из неё выходишь. В чём ошибка?

Deleted

Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от ktan

Ну мы уже уломали частично. Но отвечать на доп вопросы по нескольку раз задалбывает. Нас 20+ на одной паре, препод один. Забывает, что ты уже отвечал на что то, задает вопросы заново. Надоедает одно и то же. Лень, просто лень. Плюс скучно. Интересней было бы, если б препод давал теорию, давал сложное задание и отпускал на самообучение. А через месяц проверял и не копался в простейших вещах. Хотя да, мой пример как раз простейший. Я второй раз на первом курсе, заново проходить всё лениво. Вот и ворчу.

Deleted
()
Ответ на: комментарий от Deleted

В общем: жаль, что задания - это например, смежный предмет, дискретка. А писать фигню только ради написать - то ещё «развлечение».

Deleted
()
Ответ на: комментарий от unt1tled

Тогда вопрос на засыпку: ты когда-нибудь видел хороший, красивый код на плюсах?

Видел. И что?

DarkEld3r ★★★★★
()
Ответ на: комментарий от unt1tled

На работах пишут продакшен, который ужасен во всем, от архитектуры до каждой отдельновзятой строчки.
А если кто-то и умудряется писать без вырвиглазного говнеца, то уродует код подругому, например однобуквенными переменными. Дада, это тоже из-за приплюснутости мозгов!

Могу только посочувствовать (тому что получше работы не нашёл).

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

да я в этом смысле сам себе сочувствую каждый день, но мне начинает казаться, что это вовсе не проклятье и нормальных программистов просто не бывает

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

но мне начинает казаться, что это вовсе не проклятье и нормальных программистов просто не бывает

Может тебе просто профессию поменять?..

Вообще вопрос «нормальности» непростой. Но если есть соглашения о написании кода и (предварительное)ревью, то всё преображается. Надо или поискать другую работу или самому продавливать изменения.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Может и поменять. За хороший качественный код ведь денег не дают. Дают за то, чтобы работало, а чтобы работало пишут 20 летние самоучки.

Переквалифицируюсь в наркомана и жизнь станет лучше с обоих сторон баррикад. Я не буду мешать скатывать профессию в говно и мне говно не будет мешать :)

unt1tled ★★★★
()
Ответ на: комментарий от Deleted

Ну вот я тоже на первом курсе. После того, как еще в сентябре написал по просьбе преподавателя пару простенький задачек, (свои реализации std::vector, std::list, что-то там еще по мелочи) он отпустил меня в свободное плавание и на пары заглядываю только за заданием и обсуждением мною написанного. Всегда, мне кажется, можно найти удобный для тебя компромисс.

ktan ★★★
()
Ответ на: комментарий от anonymous

Тот же llvm почитай, или Qt.

а не много-ли ты хочешь? Над проектами работают сотни людей, ту нужна не «красота», а строгое соблюдения гайдлайнов. В твоём городе хрущёбы есть? А сталинские дома? Что «красивее»?

emulek
()
Ответ на: комментарий от Deleted

Уютная джава расслабляет.

это там, где есть тип «byte» (8 бит, но со знаком почему-то. А вообще это ЛПП, и размер Byte.MAX_VALUE), есть char, он умеет юникод, но я так и не понял: 2 байта это, или UTF-8? Ещё есть int. В общем весело у вас там.

emulek
()
Ответ на: комментарий от Deleted

И foreach есть

вот именно. Теперь ты знаешь, что foreach == не сильно нужный сахар над итераторами. Нужен только для того, что-бы писать меньше.

emulek
()
Ответ на: комментарий от ck114

Вот раз уж такое дело пошло, то не мог бы ты рассказать, каким образом научиться писать качественный код?

ЧИТАТЬ код. Что-бы красиво писать по-русски, необходимо много читать по-русски. С кодом тоже самое.

emulek
()
Ответ на: комментарий от unt1tled

А если кто-то и умудряется писать без вырвиглазного говнеца, то уродует код подругому, например однобуквенными переменными. Дада, это тоже из-за приплюснутости мозгов!

ЩИТО?

emulek
()
Ответ на: комментарий от unt1tled

За хороший качественный код ведь денег не дают.

Когда как. Важна ведь не абстрактная «хорошесть», а лёгкость чтения/понимания/расширения. Если проект собирается долго жить, то это имеет вполне понятные плюсы в плане «снижения стоимости разработки». Мне как-то везло на начальство которое это понимает.

Если ты сам начальство, то это уже твоя задача объяснить это заказчику/инвесторам.

Понятно дело, что если стоит задача «сделать побыстрому и забыть», то и приоритеты другие. Но опять же - ты сам выбрал такую работу/сферу.

DarkEld3r ★★★★★
()
Ответ на: комментарий от emulek

это там, где есть тип «byte» (8 бит, но со знаком почему-то. А вообще это ЛПП, и размер Byte.MAX_VALUE), есть char, он умеет юникод, но я так и не понял: 2 байта это, или UTF-8? Ещё есть int. В общем весело у вас там.

забыл что int не может быть unsigned

unt1tled ★★★★
()
Ответ на: комментарий от emulek

ту нужна не «красота», а строгое соблюдения гайдлайнов.

Имхо, соблюдение гайдлайнов вполне себе красиво. Особенно, если сравнивать с кодом, который несколько человек пишет «каждый в своём стиле».

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Но опять же - ты сам выбрал такую работу/сферу.

когда я ее выбирал, все было как-то подругому, знаешь... юниксы там, шутки про сисадминов из ада и дум, сишка во все поля... а щас кучи юных задротов, знающих 1 недоязычок на двоечку и мнящих себя царями вселенной

unt1tled ★★★★
()
Ответ на: комментарий от DarkEld3r

Имхо, соблюдение гайдлайнов вполне себе красиво.

ничего «красивого» тут нет. Без гайдлайна на напишу простой и быстрый код с лямдами, с гайдлайном мне придётся уродоваться с указателями на C++ классы(ты видел такой код?), и вводить тысячи ненужных сущностей. И почему? А потому, что кто-то не любит/не умеет/не знает про лямбды(ненужное вычеркнуть). А такое часто бывает(чуть менее, чем всегда).

Особенно, если сравнивать с кодом, который несколько человек пишет «каждый в своём стиле».

видел. Я же не против гайдлайнов вообще, ИМХО это необходимость.

emulek
()
Ответ на: комментарий от emulek

Я же не против гайдлайнов вообще, ИМХО это необходимость.

Тогда мы друг друга не поняли. Я понятия не имею какие гайдлайны для ллвм приняты и лень гуглить. У нас лямбды разрешены, как и весь набор С++11 фич, результат вполне нравится.

DarkEld3r ★★★★★
()
Ответ на: комментарий от unt1tled

Так то может, начиная с java 8. Точнее есть метод, который запихивает в signed int строковое представление unsigned, и второй метод, который возвращает беззнаковое число строкой. Хотя это тоже костыль. Тем более редко требуется.

Deleted
()
Ответ на: комментарий от emulek

В джаве все числовые типы со знаком. Byte, Short, Integer, Long - это соответственно 8, 16, 32, 64 бита. Boolean - размер не определён, но хранит 1 бит информации. Character - 16-ти битовый юникод. Вот ссылка на документацию. Кстати с доками в джаве ввобще всё хорошо. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Как и с IDE и другими инструментами, что увы, пока не скажешь о помойке вроде плюсов. Хотя я не считаю, что плюсы - это «не нужно». Я считаю, что обратная совместимость плюсов с си вредит обоим языкам, сильно сказываясь на читабельности и мешанине из несовместимых методов. Например, для работы с памятью.

Deleted
()
Ответ на: комментарий от emulek

Не встречался с лямбдами в плюсах, но в джаве зарождение фп только радует. Стало, субъективно, удобнее, хоть и непривыяно ещё.

Deleted
()
Ответ на: комментарий от Deleted

Из-за мешанины. Код получается менее лаконичным и менее понятным. Мой внутренний парсер слоупочит на таком. Хотя кое-что в плюсах меня радует, как увлекающегося ACM ICPC время от времени. Например, <algorithm>

Deleted
()
Ответ на: комментарий от Deleted

По пунктам:

Никто не заставляет тебя юзать unsigned в сишке. Это не баг, а фича. Как пример приведу utf-8, какой смысл хранить байты в двухбайтовых переменных? Но в однобайтовые из жабы бйты не влезут. Проблема не в памяти, проблема в скорости.

По поводу Character, мне непонятно, как хранить трёхбайтовые коды, которые тоже бывают, например звёздочки на ЛОРе?

По поводу документации: учи матчасть, есть документация и к сишке, и к плюсам.

По поводу мешанины, это не проблема языка. Это проблема проекта.

По поводу памяти, тоже проблема проекта. Никто не мешает сделать свой аллокатор с GC и шлюхами, как в жабе. Делай, а потом гордись им. Ну или жюри что дают. В сишке есть выбор, в жабе без вариантов, вам только и остаётся, что придумывать юзкейсы, в которых жабья безальтернативность проигрывает дефолту в сишке.

Ну а при чём тут ide, я не знаю.

emulek
()
Ответ на: комментарий от Deleted

В плюсах фп довольно удобно, хотя и избыточно. Вред фп в плюсах лишь потому, что быдлокодеры его будут пихать не к месту.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.