LINUX.ORG.RU

Китайский G++


0

1

Разочаровавшись в gcc Какая версия gcc даст предупреждение на данный код? (комментарий) не проходит много времени, как я сталкиваюсь с ерундой G++. Использовал в программе бинарный поиск и по невнимательности неправильно вызывал функцию, а именно, для массива из 2 элементов, говорил что там 5. Вместо того чтобы возвращать (-1), мне возвращался верный индекс элемента... Под виндой в visual studio возвращает (-1).

#include<iostream>

int BinarySearch(const int *arr, int count, const int &elem) {
  int first = 0;
  int last = count;
  while(first < last) {
    int mid = first + ((last - first) >> 1);
    if(elem <= arr[mid]) {
      last = mid;
    }
    else {
      first = mid + 1;
    }
  }
  return (first == count || arr[first] != elem) ? -1 : first;
}



int main() {
  int a[] = {4,5};
  std::cout << BinarySearch(a, 5, 5);

  return 0;
}
 
Проверял на g++ 4.6 4.7.2 4.8.2 Есть подозрения, что у меня apt-get тянет эти компиляторы из левого репозитория. Ибо у многих из вас скорее-всего уже будет выдаваться правильно "-1", а у меня выводится «1». Думаю, что компиляторы левые у меня т.к.в прошлой теме про gcc только у меня и у одного анонима не выводилось сообщение об ошибке.

Потратил 3 часа на поиск ошибки в программе (просто она работала правильно, но система тестирования не принимала, ибо там нормальный компилятор 4.7.2) из-за этой фигни, злой как собака... никакого доверия теперь к gcc и g++.



Последнее исправление: mrXorg (всего исправлений: 2)
Ответ на: комментарий от wakuwaku

дистропроблемы

ubuntu 12.04, с какого фига на ней проблемы? До этого сидел на debain, но обстоятельства заставили сидеть на ненавистной ubuntu

mrXorg
() автор топика

В твоём примере нет правильного варианта, возвращать может любое значение от -1 до 4 в первом приближении. Если руки из жопы растут вместе с головой, то нужно юзать std::vector или аналоги. Ну и assert'ы на проверку отсортированности вектора.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)

Здесь ты встречаешься с неопределённым поведением: поведение может зависеть хоть от фазы Луны, хоть от погоды на Марсе. Откуда тебе знать, что в памяти, к которой происходит обращение при a[2] не находится большее чем 5 число?

anonymous
()

забудь про С и С++, это не твое

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

простой вариант - запустить что-нибудь пригодное для работы в виртуалке.

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

может возвращать любое значение из [-1, 1, 3, 4]

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

Если руки из жопы растут вместе с головой, то нужно юзать std::vector или аналоги.

Ну да, ты наверное сразу программировать научился. Конь борзой.

забудь про С и С++, это не твое

извини, а ты кто?

может возвращать любое значение из [-1, 1, 3, 4]

Ясно. Спасибо.

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

извини, а ты кто?

я тот, кто никогда не делал таких глупых выводов как у тебя, ты не освоил базовые вещи и с умным видом рассуждаешь о «неправильных» компиляторах

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

Ну да, ты наверное сразу программировать научился.

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

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

я тот, кто никогда не делал таких глупых выводов как у тебя

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

ты не освоил базовые вещи и с умным видом рассуждаешь о «неправильных» компиляторах

на то были основания (например ссылка в первом сообщении) и невероятные совпадения, когда на одном компе всегда 1, а на других всегда -1

умным видом рассуждаешь

желтизна заголовка не о чем не говорит?

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

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

я так не делаю, а вот заткнуть дурака иногда себе позволяю

на то были основания

мозги надо использовать и знания, а не «основания»

желтизна заголовка не о чем не говорит?

«Думаю, что компиляторы левые у меня» (с)

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

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

Это всё для такого чтобы ты смог самоутвердиться на форуме.

mrXorg
() автор топика
Ответ на: комментарий от wota

мозги надо использовать и знания, а не «основания»

ну я же не тот, кто:

никогда не делал таких глупых выводов

«Думаю, что компиляторы левые у меня» (с)

Ну да, а еще у меня ubuntu бракованная, на рынке купил диск, скачал battlefield 4, а он не запускается, прикинь, да!?

mrXorg
() автор топика

Парень, ты, похоже, вообще не понимаешь как компьютеры работают. Из-за того, что ты «неправильно вызывал функцию» у тебя функция поиска искала в левой памяти за пределами массива a. Там может быть вообще что угодно, в том числе недоступные программе страницы - тогда бы был segmentation fault. Три лишних числа брались из мусора и не были отсортированы, поэтому бинарный поиск на VS ничего не находил, а на gcc тебе так «повезло», что на третьем месте оказалось большое число, поиск переходил к первой половине массива (которая отсортирована вручную - 4 5) и находил 5.

Читал K&R?

legolegs ★★★★★
()

Совет: пиши код так, чтобы работал везде. Если какой-то компилятор ведет себя странно на участке - срочно перепиши участок кода.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от mrXorg

Если ты уже разобрался где твоя ошибка, то отметь тему как решённую.

legolegs ★★★★★
()

Это UB, не пиши на Си больше.

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

привет слоупок

Вам, дураку, дали развернутый ответ, а вы выеживаетесь. Правильно, что wota вас мордой в говно макнул.

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

Какая нынче наглая, ебанутая школота пошла.

Дваждую этого анона.

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

дали развернутый ответ

Ага, только раньше на 10 сообщений

Правильно, что wota вас мордой в говно макнул.

Лол, я что-то не заметил. Я назову вас социопатом, просерающим жизнь на форуме. И что с этого? Правильно, что я вас мордой в говно макнул!?

И да, для особо одаренных, тема отмечена как решенная, слейтесь уже.

mrXorg
() автор топика

int a[] = {4,5}; std::cout << BinarySearch(a, 5, 5);

данный говнокод может выдавать что угодно. Иди в дворники.

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

Ну да, ты наверное сразу программировать научился. Конь борзой.

борзой ты: выложил говнокод, и обвиняешь других программистов в «неправильных компиляторах».

мог-бы ничего не писать, просто код, и «ЧЯДНТ?»

Но тебе — в дворники. Будешь там учить, какой лопатой копать.

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

да нормально, может он читает свой первый учебник только. со временем с возрастом с опытом придёт осознание.

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

на то были основания (например ссылка в первом сообщении) и невероятные совпадения, когда на одном компе всегда 1, а на других всегда -1

а кто сказал, что говнокод должен работать как генератор случайных чисел? Хрен тебе.

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

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

Сейчас в школе совсем плохо, да?

emulek ★
()

Прежде чем писать на каком то языке, надо прочитать хотя бы одну книжку по этому языку. Ты этого не сделал. На нашем дружелюбном форуме тебя естественно в грубой форме послали, а ты теперь злишься на «борзых коней» и gcc ? :)

И искать ошибки в компиляторах имеет смысл начинать тогда, когда ты сам будешь готов написать компилятор. Баги иногда вызалят на -Os или -O3+, но найти ошибку при обычном использовании почти нереально.

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

данный говнокод может выдавать что угодно. Иди в дворники.

я же писал в первом сообщении

неправильно вызывал функцию

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

Нашёл к чему прикопаться, клоун.

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

Сейчас в школе совсем плохо, да?

тебе лучше знать

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

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

ты написал какую-то ерунду непонятную. Вот с кодом всё ясно: классический говнокод. Все такой писали, я тоже.

А вот валить всё на «китайский G++» — такой клоунады ещё не видел.

Сейчас в школе совсем плохо, да?

тебе лучше знать

мне — да. У меня старший скоро первый класс закончит. Но у него обычная общеобразовательная. У тебя наверное какая-то специальная. Да?

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

ты написал какую-то ерунду непонятную

Что тебе не понятно?

Вот с кодом всё ясно: классический говнокод.

Да ты упоротый искатель говнокода. 2 строчки кода в main были написаны специально для ошибочной ситуации. Если ты этого не понимаешь, попроси объяснить своего «старшего».

А вот валить всё на «китайский G++»

Я смотрю до тебя всё очень долго доходит. Попроси объяснить ситуацию у wota. До него хотя бы дошло. Хотя нет, походу ты неизлечим. Лучше сразу об стену.

У тебя наверное какая-то специальная. Да?

У ванги уроки брал?

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

Иди в дворники.
Но тебе — в дворники.

в другом топике

Пойду насру дворнику под дверь — это его хлеб. Пусть с утречка проснётся, и порадуется.

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

mrXorg
() автор топика

Чувак, думаешь тебе по силам обосрать весь форум?

//Код реально портянка галимая

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

>дайте денег, хоть на яд 41001666004238, как скопиться 1000 рублей, так увидите фотку жопы моей жены с логотипом слаки)

я тебе скинул деньги, жопу в студию

mrXorg
() автор топика
Ответ на: комментарий от false

Чувак, думаешь тебе по силам обосрать весь форум?

Мне интересно просто разговаривать с клоунами, которые просят деньги на своя ЯД кошелек на 100 страниц в гугле.

Да, emulek?

mrXorg
() автор топика
Ответ на: комментарий от false

//Код реально портянка галимая

То что тут много пустословов - это я уже давно понял.

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

Что тебе не понятно?

мне непонятно, ради какой наглядности ты постишь ДРУГОЙ код? А где ТОТ?

Да ты упоротый искатель говнокода. 2 строчки кода в main были написаны специально для ошибочной ситуации.

добро пожаловать в удивительный мир сишечки, детка. Здесь код с ошибкой работает КАК УГОДНО. Кому угодно? КОМУ УГОДНО, КРОМЕ ТЕБЯ.

Я смотрю до тебя всё очень долго доходит.

да. До меня туго доходит, как можно быть таким упорытым. И ещё туже: при чём тут вообще компиляторы?

Хотя нет, походу ты неизлечим. Лучше сразу об стену.

я — да. Вот wota понял: «ты не освоил базовые вещи и с умным видом рассуждаешь о «неправильных» компиляторах». А я ещё надеюсь...

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

мне непонятно, ради какой наглядности ты постишь ДРУГОЙ код? А где ТОТ?

Может мне весь проект скинуть и доступ на гитхаб дать? Все ведь начнуть разбираться и искать проблему.

да. До меня туго доходит

ну хоть с этим уяснили

я — да

нихера

Вот wota понял: «ты не освоил базовые вещи и с умным видом рассуждаешь о «неправильных» компиляторах»

прочитай ещё раз 10 этот топик, клоун

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

Мне интересно просто разговаривать с клоунами, которые просят деньги на своя ЯД кошелек на 100 страниц в гугле.

я не прошу. И ничего я тебе не обещал. Даже фотки жопы. Извини, если что не так...

Слушай, а что тебя так бомбануло-то?

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

Может мне весь проект скинуть и доступ на гитхаб дать?

не нужно. Мне этого хватило.

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

Слушай, а что тебя так бомбануло-то?

Лол, я вроде тут со всеми так общаюсь. Просто таких клоунов как ты в реале не встречал, вот и интересно, что ты за индивид такой.

Ещё мне интересно что ты так не любишь дворников то? Просто у тебя весь лексикон состоит из слова «дворник». Попробую разобраться в твоей болезни. Итак, поехали:

нет. Потому что если флешки у дворника нет, то ему нужна бумажка с паролем всех дворников, а возможно и со своим личным паролем. Ну и с паролем для уборщиц. Флешка этот вопрос решает, а юзер остаются только ткнуть в нужный ярлык.

Кроме того, дворник может задать пассфразу, лично свою на общие ключи. Что приведёт к тому, что другой дворник не сможет воспользоваться чужой флешкой

в таком случае админу придётся поднимать учётку «вася» и группу «дворники»

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

различие в том, что тебе тогда придётся каждого дворника обучить работе с терминалом, с ssh, с scp, и с прочими rsync. А ещё в том, что 95% это не запомнят, а запишут на бумажке, и бумажку налепят на монитор. Потому что им не платят за безопасность.

Для дворников, финансистов, сантехников, да для кого угодно.

а теперь интрига, этому клоуну пишут http://club2.org.ru/index.php?showtopic=434

Только работать будет уборщиком или дворником.

Я определил твою болезнь. Дворникофобия.

Жалко твоего «старшего» только. Иметь отца, у которого дворникофобия, который общается на хохлосрачах всяких и просит денег у школьников на ЯД, в сложные моменты выкладывая фото жопы жены за деньги.

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

Ещё мне интересно что ты так не любишь дворников то? Просто у тебя весь лексикон состоит из слова «дворник».

интересно, каким китайским рандомом ты парсил ВСЕ мои Over9000 сообщений?

Попробую разобраться в твоей болезни.

знаешь, у меня Over9000 постов. У тебя 649. И похоже слово «клоун» у тебя в каждом посте. Задумайся об этом.

Я определил твою болезнь. Дворникофобия.

а я твою: клоун.

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

И похоже слово «клоун» у тебя в каждом посте. Задумайся об этом.

Это слово стоит в каждом посте адресованном тебе, клоун. :D

mrXorg
() автор топика

Потратил 3 часа на поиск ошибки в программе

valgrind ./shit 
==8241== Memcheck, a memory error detector
==8241== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==8241== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info
==8241== Command: ./shit
==8241== 
==8241== Conditional jump or move depends on uninitialised value(s)
==8241==    at 0x40086F: BinarySearch(int const*, int, int const&) (shit.cpp:8)
==8241==    by 0x4008EF: main (shit.cpp:22)
==8241==
false ★★★★★
()
Ответ на: комментарий от false

Потратил 3 часа на поиск ошибки в программе

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

Чтобы валгринд отловил эту ошибку, нужно было чтобы функция вызывалась с «ложным размером». У меня же программа работала подставляя ложное значение в функцию редко. А если и выставляла, то отрабатывала правильно( т.е. найденный индекс случайно оказывался верным) Т.е. мне нужно было написать over 1000 тестов для программы и спарсить выводы, чтобы валгринд нашел что есть зависимать от неинициализированного значения.

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