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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.