![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ioManip |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 12.8.2011 Где: Благовещенск Репутация: нет Всего: нет |
Вот такая штука выскакивает при отладке: Segmentation fault
Element.h
Element.cpp
main.cpp
Сообщение об ошибке, выскакивает именно вот здесь:
Это сообщение отредактировал(а) ioManip - 15.11.2014, 11:47 --------------------
Мечты не работают, пока ты не работаешь! |
||||||||
|
|||||||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Ну надо жэ! А у меня вот "main.cpp:7:3: error: 'cout' was not declared in this scope" ещё при компиляцыи. И это, надо сказать, гораздо более ожыдаемо для приведённого кода. А вообще, учитывая общую бредовость кода -- надо ещё пример правильного использования и входных данных, приводящих к ошыбке приводить. PS Ну и да, про "общаую бредовость" -- у Вас в основном цыкле поиска просто невозможная какая-то ахинея, у меня не очень получается дажэ представить, что это должно было быть. Но это всё неправильно. |
|||
|
||||
| ioManip |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 12.8.2011 Где: Благовещенск Репутация: нет Всего: нет |
Грубовато конечно, но ничего! А не работает у Вас потому что не хватает, вот этих строчек
Но Вы это и сами прекрасно знаете.
--------------------
Мечты не работают, пока ты не работаешь! |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Добавлено через 8 минут и 18 секунд А здесь вообще какое-то безрассудство: -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| ioManip |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 12.8.2011 Где: Благовещенск Репутация: нет Всего: нет |
Охх и правда! Это уже моя невнимательность! Теперь понятно, почему так вспылил товарищ tzirechnoy. Там и правда бред был :( Я вообще этот код с C# переводил...вот наверное и не туда глянул Ну я поправил main.cpp
Element.cpp
Element.h
Но это штука так и продолжает меня терраризировать. В том же месте
Это сообщение отредактировал(а) ioManip - 17.11.2014, 14:02 --------------------
Мечты не работают, пока ты не работаешь! |
||||||||
|
|||||||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Я вижу много new и ни одного delete - это вам не Java/C# - будет утечка памяти
Тут есть туториал http://www.learncpp.com/cpp-tutorial/69-dy...new-and-delete/ Это не решит выших проблем но есть над чем задуматься Это сообщение отредактировал(а) sQu1rr - 17.11.2014, 14:08 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Так ведь это осталось: Вы бы в начале цикла делали бы А изменения индексов - уже потом... А здесь в чем смыл использования ссылок? Вообще, меня гложут смутные сомнения, что индексы изменяться должны были бы по такому правилу:
а не как у Вас... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| tzirechnoy |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Вряд ли всё так просто -- всё равно можно получить i>n-1 и j>n-1.
Я не вспылил. В сети я всегда грубый и язвительный. Мне очень лень копипастить пример, но, подозреваю, что от добавления Вашых трёх строчек изменится только номер строки с первой ошыбкой, и cout сменится на std::cout. А так -- будет ровно тот жэ несобираемый пример. Вам всё-таки следует взять, создать проект из трёх файлов, собрать его и запустить перед тем, как постить. Это кажэтся сложным? Хорошый повод потренироваться, Вы ведь всё равно тренируетесь владеть C++. Или слишком простым? Так тем лучшэ, проделайте эти 5 действий, и Ваша совесть будет чиста. Да, потом можно, конечно, ткнуть Вас непосредственно в то, что у Вас индэкс за границу массива выходит... Но по-моему это безсмысленное действие. Ну, то есть, я подозревал, что безсмысленное. Вон, товарищ fedorv ткнул -- и что, помогло это Вам? Вроде нет. Потому у меня другое предложэние -- возьмите 3 листа A4. Возьмите карандаш. создайте на этом листе Вашы три массива (два одномерных и один двумерный), с измерениями, соответствующими Вашым входным данным. Кстати, данные можно взять поменьшэ -- по-моему, 1 2 3 4 5 6 7 вполне выдадут тот жэ самый segfaultный результат. Занесите начальные данные в массив (тут у Вас вроде всё вменяемо). И потом, вручную, просчитайте каждый шаг программы, записывая значения переменных. Возможно, Вы поймёте, что в этой программе делается. Возможно, Вы увидите какие-то инварианты и ограничения, которые должны выполняться. Возможно, Вы увидите какие-то неправильные шаги, которые выполняться не должны -- и тогда сможэте изменить программу. Когда Вам будет казаться, что на бумаге всё прошло до конца и сделано правильно, а программа всё равно работает не так -- займитесь выводом журнала операцый (ну, банально, cerr << "I is: " << i ", J is: " << j << "\n";), и сверяйте в разных местах значения переменных и массивов в с тем, что Вы насчитали. Поскольку алгоритм вполне детэрминирован -- в какой-то момент будет первое различие, которое поможэт понять, в чём Вы ошыбались. |
||||
|
|||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Это да. Но я предложил значимые операторы в теле цикла перенести в его начало, а все изменения индексов - в конец
ioManip, очень хороший совет, призываю прислушаться -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Зачем все так усложнять? Зачем нужны классы для такой простой задачи. Если вы изучаете классы, то выбрали неправильную задачу
Если я правильно понял задача сводится вот к этому:
А ваш код вводит в заблуждение (запасы клиента) - какие у него могут быть запасы, если ему что-то доставляют, а потом отнимают от "его запасов". Наверное это все же "вместительность клиента" |
|||
|
||||
| sQu1rr |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
А segmentation fault у вас изза сдед. строчек кода:
Тут вы уже исправились
А вот тут нет, во первых, индексы выходят за предел (вам об этом уже говорили), а во вторых, опять i вместо j, но опять же уже исправили Должно быть так:
И как я указал выше вы не освобождаете пямять которую выделяете операторами new! Это сообщение отредактировал(а) sQu1rr - 17.11.2014, 22:20 |
||||||
|
|||||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Кстати, не самое осмысленное занятие в данном примере. Надо заметить, что текущая память в приложэниях, которые работают неделями -- бесит, но манера всякого объектного кода вызывать мильон деструкторов и деаллокаторов минуту работы HDD там, где достаточно _abort() -- бесит не менее. |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Так любой пример на этом сайте не достоин освобождению памяти в таком случае. На мой взгляд - освобождение - хорошая привычка, и лучше ставить delete везде где можно пропустить, будучи увереным что ОС все подчистит, чем пропустить там где это будет дорого стоить. Тем более это must если проект в будущем будет усовершенствоваться, или будет использоваться как библиотека.
Деструкторы могут содержать логику отличную от просто освобождения памяти. ОС при подчистке их не запустит. Да и вообще, что вы советуете человеку который явно не очень давно начал изучать язык? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |