Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Компиляторы с++ в линуксе и в винде. код один - результат разный.  (Прочитано 2314 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Night_0ver

  • Автор темы
  • Участник
  • *
  • Сообщений: 209
  • Ubuntu 9.04_x64
    • Просмотр профиля
Итак имеется программка. Она считывает из файла матрицу, которая характеризует граф. Функция находит все возможные пути от одной точки до другой с помощью рекурсии.
При небольших подсчетах все нормально, но при больших на лине программа выдает странное.
1-2-3-4-6-
1-2-3-5-6-
1-2-3-6-
1-4-3-6-4-6-
1-4-6-
А в винде на билдере выдает то что нужно.
1-2-3-4-6-
1-2-3-5-6-
1-2-3-6-
1-2-5-3-4-6-
1-2-5-3-6-
1-2-5-6-
1-3-2-5-6-
1-3-4-6-
1-3-5-6-
1-3-6-
1-4-3-2-5-6-
1-4-3-5-6-
1-4-3-6-
1-4-6-
Никак не  пойму в чем разница :idiot2:
Ниже сам код, все не нужное вроде выкинул. Сама проблема в функции. Прошу совета.
(Нажмите, чтобы показать/скрыть)

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
class put{
   public:
   int kol;
   int put[razm];
   int summa(void){int s=mas[put[0]][put[1]];
      for(int i=1;i<kol;i++)
         s+=mas[put][put[i+1]]; 
      return s;
   };
};
что такое kol? длина пути? если да, то в цикле for ниже объявления ты читаешь за пределами 0..(kol-1)

ЗЫ. когда детей уже начнут сначала учить суммировать элементы массива, а уж потом - решать задачи на графах?

ЗЗЫ. Такой ужасный код показывать посторонним людям (кроме своего исповедника препода) - стыдно ;)

Оффлайн Night_0ver

  • Автор темы
  • Участник
  • *
  • Сообщений: 209
  • Ubuntu 9.04_x64
    • Просмотр профиля
что такое kol? длина пути? если да, то в цикле for ниже объявления ты читаешь за пределами 0..(kol-1)
Что то я не понял где это у меня kol-1 ? И kol не длина пути, а количество путей(отрезков).
ЗЫ. По проблеме так и не ответили((


Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
ок. опиши подробно класс put - что он символизирует, каждое поле, метод.

ЗЫ. Проблема не в компиляторах, проблема в глючном коде...

Оффлайн Night_0ver

  • Автор темы
  • Участник
  • *
  • Сообщений: 209
  • Ubuntu 9.04_x64
    • Просмотр профиля
Я и не говорю что проблемма в компиляторах. Проблема у где то меня. просто она какая то не заметная, раз работает в оффтопике и не работает в лине при больших размерах. Не пойму где лежит эта тонкая грань работы там и не работы тут. Завтра на свежую голову наверно перепишу его как то.

class put это путь от начальной до конечной точках.
kol количество отрезков, транзитов, в нем.
summ длина или же вес всего пути.
put[] массив где записаны вершины входящие в путь.

Оффлайн Night_0ver

  • Автор темы
  • Участник
  • *
  • Сообщений: 209
  • Ubuntu 9.04_x64
    • Просмотр профиля
Разобрался. Переменная int kolput=0; должна быть определена до массива классов put pt[razm*2];   :-[   В противном случае kolput не принимала нужных значений.

Оффлайн lpb

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
ну а теперь посмотри чему равен  kolput ?
равен он 14 !!!! что ну никак не равно размерности pt[razm*2]  которая = 12

вот поэтому когда перенес объявление и стало работать. т.к. стал портить другую память
а под виндой работало чисто случайно

зы а код действительно ужасен :'(

Александръ

  • Гость
Мой препод такое даже проверять бы не стал. Может аффтару поискать в гугле материалы по оформлению исходного кода? Поберегите мозг, ещё пригодится.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
открой для себя std::vector, std::list и т.д. проблем с управлением памятью станет меньше.
а пока сиди ночами, кури кофе и пей никотин вылавливая блох в своём коде.

axe, детей сначала надо учить форматировать код. все проблеммы от туда. напишут какую-нибудь неудобочитаемую хренотень а потом удивляются что там ошибка.
« Последнее редактирование: 04 Января 2009, 17:26:59 от Yurror »

Александръ

  • Гость
открой для себя std::vector, std::list и т.д. проблем с управлением памятью станет меньше.
Объясни пожалуйста начинающему программеру в чём разница между  "std::vector, std::list и т.д." и "using namescapce std".

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
открой для себя std::vector, std::list и т.д. проблем с управлением памятью станет меньше.
Объясни пожалуйста начинающему программеру в чём разница между  "std::vector, std::list и т.д." и "using namescapce std".
для Hello-world приложений никакой. Для больших и сложных - namespace-qualified имена могут помочь избежать конфликтов имен. ЕМНИП, в coding guidelines от гугла using ... вообще запрещены.

насчет оформления - полностью согласен. У меня, например, аллергия на имена типа "kol", "put", "razm", "summa", "massiv". Ну это уже не говоря про собственно код, форматирование, разбиение на функции, и т.д.

Беда в том только, что азам обычно учат те, кто дальше азов сам не продвинулся. Был у меня такой - говорил: "я не программист - я пользователь"  :2funny: и этим гордился..

burgua

  • Гость
(Нажмите, чтобы показать/скрыть)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
открой для себя std::vector, std::list и т.д. проблем с управлением памятью станет меньше.
Объясни пожалуйста начинающему программеру в чём разница между  "std::vector, std::list и т.д." и "using namescapce std".
Разница эм... эти понятия не сравниваются.

открой для себя std::vector, std::list и т.д. к тому что бы безымянные герои прекратили писать что-то типо такого int massiff[CHISLO_blLEMEHTOFF];
юзайте и std::vector<int> и получайте по башке исключение при обращении за границы.
используйте стандартные алгоритмы с контейнерами (да, я тоже знаю что обычные массивы тоже можно этими алгоритмами обработать).

"using namescapce std" всего лишь импортирует имена из пространства std в текущее пространство имен.

чем это грозит использование такого оборота вместо явного указания пространства имен каждый раз на программах чуть более чем курсак в универе см пост axe.
(Нажмите, чтобы показать/скрыть)

P.S. Night_0ver почитай Роберт Седжевик - Фундаментальные алгоритмы на C++ (часть 5) там написано как правильно выполнить твою домашнюю работу.
« Последнее редактирование: 04 Января 2009, 20:56:30 от Yurror »

 

Страница сгенерирована за 0.052 секунд. Запросов: 25.