|
|
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Столкнулся с проблемой, подскажите куда смотреть. В работе использую visual studio 11, windows 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Т.е. после первого перебора vector<string> tools убивается. Как это побороть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:03:44 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, Ну, это странно. Не должно. Но кто тебя знает, что там у тебя в operator << ... Могу посоветовать только в данном случае использовать const - объект tools и/или const_iterator по верктору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:53:21 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, Кстати, тут : Код: plaintext 1. могло бы быть так: Код: plaintext 1. это возможно съэкономило бы одно лишнее копирование вектора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:54:03 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadКак это побороть? Написать багреп в МС. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 13:09:00 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы, буду смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 16:40:38 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
С const_iterator работает как надо. Не понятно баг это или фича. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 16:52:39 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, А у тебя repro есть ? Маленький код, который это воспроизводит... Если есть -- поделись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 17:02:14 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivGijad, А у тебя repro есть ? Маленький код, который это воспроизводит... Если есть -- поделись. Попробую сделать, и воспроизвести ошибку, но не сегодня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 17:04:34 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Не получается сделать repro в чистом виде, не прикручивая к нему дополнительных библиотек. Продолжая исследовать проблему обнаружил (код собирался с оптимизацией O2): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если в конструкции закоментировать хотя бы одну строку или 2 сразу ( stmt->execute(("CREATE TABLE " ), то ошибки не происходит. Если во втором цикле не закомментировать хотя бы одной из этих строк данные пропадают. Если закомментировать все строки тоже все норм. Просто нельзя закомментировать DROP TABLE чтобы не получить ошибку БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2014, 20:04:34 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, Если бы это было у меня в проекта - я бы подумал что поломал память где то. Например, вышел за пределы массива(или строки). Способов это сделать много, поэтому тут уже надо смотреть детали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 05:31:43 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, stmt->execute Это из какой библиотеки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 08:34:47 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivGijad, stmt->execute Это из какой библиотеки? Код: plaintext 1. 2. 3. 4. 5. 6. mysqlcppconn.dll libmysql.dll ссылка на пример из документации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 09:42:15 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
alex_kGijad, Если бы это было у меня в проекта - я бы подумал что поломал память где то. Например, вышел за пределы массива(или строки). Способов это сделать много, поэтому тут уже надо смотреть детали. Поломанная память не должна зависеть от оптимизации, если она поломана, то поломана. А тут наблюдается эта зависимость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 09:44:08 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadПоломанная память не должна зависеть от оптимизации, если она поломана, то поломана. А тут наблюдается эта зависимость. Ха, ещё как она зависит! При выключенной оптимизации, да ещё в дебаг режиме, очень часто поломки памяти не видны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 09:52:49 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivХа, ещё как она зависит! При выключенной оптимизации, да ещё в дебаг режиме, очень часто поломки памяти не видны. Я изучал проблему релизов . И когда вылезла эта, я ожидал подобного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 10:01:54 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Видимо, все-таки ломается память, как именно х.з. Есть ли какие-нибудь инструменты облегчающие поиск ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 10:33:40 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivмогло бы быть так: Код: plaintext 1. это возможно съэкономило бы одно лишнее копирование вектора. Сейчас специально проверил: Код: plaintext 1. вывел на печать &tools в функции и &tools в теле программы, адреса полностью совпали. Никакого лишнего копирования не произошло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 11:38:40 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadВидимо, все-таки ломается память, как именно х.з. Есть ли какие-нибудь инструменты облегчающие поиск ошибки? В винде ? Там были вроде какие-то режимы сборки специальные... Надо читать, про последние версии VC я не очень в курсе. Я знаю, что там что-то продвинули в плане отладки, но помню только про STL (безопасные итераторы). Про линукс -- valgrind. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:04:46 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadMasterZivмогло бы быть так: Код: plaintext 1. это возможно съэкономило бы одно лишнее копирование вектора. Сейчас специально проверил: Код: plaintext 1. вывел на печать &tools в функции и &tools в теле программы, адреса полностью совпали. Никакого лишнего копирования не произошло. Ты слово "возможно" заметил ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:05:19 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivТы слово "возможно" заметил ? Заметил, поэтому и решил проверить, чтобы закрыть этот вопрос для себя. Винда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:08:43 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Дебаггер в VS какой-то странный, когда код собран с O2 он игнорирует большую часть имеющихся (инициализированных) переменных. Без оптимизации вроде норм, хоть вообще её отключай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:13:15 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadДебаггер в VS какой-то странный, когда код собран с O2 он игнорирует большую часть имеющихся (инициализированных) переменных. Без оптимизации вроде норм, хоть вообще её отключай. А как ты думаешь делается оптимизация ? Выкидываются лишние переменные, в том числе. Правда, это можно наверняка запретить. Но это надо читать документацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:20:20 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadЕсть ли какие-нибудь инструменты облегчающие поиск ошибки? Большую часть ошибок способна ловить сама отладочная RTL, нужно только указать её использование при сборке. На остальное есть, например, drMemory. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:25:16 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, На самом деле я даже и не знаю, чем ловить порчу памяти, в смысле, тул какой использовать. Такие ошибки на самом деле достаточно редки. Там были какие-то сторонние библиотеки, но они все за денюжку... Как самый простой вариант, можно просто пройти в отладчике по всему этому коду, проверяя тщательно все переменные после каждой модификации, а особенно -- этот вектор tools. Там кода в общем немного. Как более продвинутый способ -- идти не по шагам, а поставить break-и на изменение памяти этого vector-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:25:16 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadНе получается сделать repro в чистом виде, не прикручивая к нему дополнительных библиотек. Продолжая исследовать проблему обнаружил (код собирался с оптимизацией O2): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если в конструкции закоментировать хотя бы одну строку или 2 сразу ( stmt->execute(("CREATE TABLE " ), то ошибки не происходит. Если во втором цикле не закомментировать хотя бы одной из этих строк данные пропадают. Если закомментировать все строки тоже все норм. Просто нельзя закомментировать DROP TABLE чтобы не получить ошибку БД. А если тут заменить итераторы на const_iterator ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:26:20 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivА если тут заменить итераторы на const_iterator ? Если закомментировать хотя бы последнюю строчку все работает. Код: plaintext 1. Иначе данные пропадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:39:56 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Давай разберём подробнее этот кусок: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. можно делать проще: Код: plaintext 1. Не правда ли, выглядит элегантнее ? Код: plaintext 1. 2. кажется слабо относится ко всему остальному шабашу, может можно убрать эти две строки ? Будет воспроизводится ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:43:54 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
GijadMasterZivА если тут заменить итераторы на const_iterator ? Если закомментировать хотя бы последнюю строчку все работает. Код: plaintext 1. Иначе данные пропадают. Да там везде не требуется запись в этот итератор, так что он может быть const. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 13:45:11 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivможно делать проще: Код: plaintext 1. Не правда ли, выглядит элегантнее ? Да, спасибо. Иду по шагам по коду, последняя строчка не комментирована, слежу в дебаггере за состоянием tools Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Если закомментировать Код: plaintext 1. то ошибок нет, 3-й цикл нормально завершается Код: plaintext 1. 2. 3. Я, конечно, попробую убрать Код: plaintext 1. 2. но тогда не будет разницы с закомментированной последней строкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 14:04:25 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, Так если уже после Код: plaintext 1. tools.size = 1550831; , то уже тут и проблема, всё остальное ненужно. Другой вопрос -- как теперь эту проблему обнаруживать. Ну, вот можно по tools.size <> 35 или сколько у тебя там... значит этот executeUpdate() уже гробит всю память в хипе. И кстати я могу даже предположить источник проблемы -- код-то вряд ли с ошибками, уж заметили бы такую явную фигню. А вот то, что ты мог собрать эту библиотеку и своё приложение с разными рантаймами ( статическим и с .DLL ) -- это никто кроме тебя не проверит. Проверь. Это достаточно общее место, потому что порядка 50% программистов на С это не понимают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 15:07:29 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Спасибо, проверю. Хотя бы заново пересобиру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 15:35:18 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Пересбор библиотеки проблему устранил. Изначально использовалась библиотека, скаченная с mysql.com. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 17:32:29 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
Gijad, Так собрана то она собрана, надо ж еще и твой проект собрать, а тут ты должен знать, для какой сборки твоя библиотека была собрана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 22:09:12 |
|
||
|
Пропажа данных из vector<string>
|
|||
|---|---|---|---|
|
#18+
MasterZivGijad, Так собрана то она собрана, надо ж еще и твой проект собрать, а тут ты должен знать, для какой сборки твоя библиотека была собрана. Так я собирал и всё работало, пока оптимизацию не включил, а если бы во втором цикле было бы на 1 строчку меньше, глядишь проблема никогда бы и не всплыла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:24:45 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019597]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 519ms |

| 0 / 0 |
