powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пропажа данных из vector<string>
10 сообщений из 35, страница 2 из 2
Пропажа данных из vector<string>
    #38593910
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА если тут заменить итераторы на const_iterator ?
Если закомментировать хотя бы последнюю строчку все работает.
Код: plaintext
1.
//stmt->execute(("CREATE TABLE " + config["scheme"] + ".`target_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());


Иначе данные пропадают.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38593914
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай разберём подробнее этот кусок:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for (vector<string>::iterator it = tools.begin(); it != tools.end(); ++it){
  stmt_insert -> setString(1, (*(it)).c_str());
  stmt_insert -> executeUpdate();
  stmt->execute(("DROP TABLE IF EXISTS " + config["scheme"] + ".`change_ask_" + *(it) + "`").c_str());
  stmt->execute(("CREATE TABLE " + config["scheme"] + ".`change_ask_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());
  stmt->execute(("DROP TABLE IF EXISTS " + config["scheme"] + ".`target_" + *(it) + "`").c_str());
  stmt->execute(("CREATE TABLE " + config["scheme"] + ".`target_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());
}




Код: plaintext
1.
stmt_insert -> setString(1, (*(it)).c_str());


можно делать проще:
Код: plaintext
1.
stmt_insert -> setString( 1, it->c_str() );



Не правда ли, выглядит элегантнее ?

Код: plaintext
1.
2.
  stmt_insert -> setString(1, (*(it)).c_str());
  stmt_insert -> executeUpdate();



кажется слабо относится ко всему остальному шабашу, может можно убрать эти две строки ?
Будет воспроизводится ?
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38593916
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GijadMasterZivА если тут заменить итераторы на const_iterator ?
Если закомментировать хотя бы последнюю строчку все работает.
Код: plaintext
1.
//stmt->execute(("CREATE TABLE " + config["scheme"] + ".`target_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());


Иначе данные пропадают.

Да там везде не требуется запись в этот итератор, так что он может быть const.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38593927
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivможно делать проще:
Код: plaintext
1.
stmt_insert -> setString( 1, it->c_str() );


Не правда ли, выглядит элегантнее ?

Да, спасибо.

Иду по шагам по коду, последняя строчка не комментирована, слежу в дебаггере за состоянием tools
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
for (vector<string>::iterator it = tools.begin(); it != tools.end(); ++it){
->  stmt_insert -> setString(1, (*(it)).c_str()); //все норм tools.size = 35;
->  stmt_insert -> executeUpdate(); //проблема!  tools.size = 1550831;
  stmt->execute(("DROP TABLE IF EXISTS " + config["scheme"] + ".`change_ask_" + *(it) + "`").c_str());
  stmt->execute(("CREATE TABLE " + config["scheme"] + ".`change_ask_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());
  stmt->execute(("DROP TABLE IF EXISTS " + config["scheme"] + ".`target_" + *(it) + "`").c_str());
  stmt->execute(("CREATE TABLE " + config["scheme"] + ".`target_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());
}



Если закомментировать
Код: plaintext
1.
//stmt->execute(("CREATE TABLE " + config["scheme"] + ".`target_" + *(it) + "` (`date` INT(10),`name_id`  INT(4),`value` DECIMAL (15,10),`value2` DECIMAL (15,10)) ENGINE = MYISAM").c_str());


то ошибок нет, 3-й цикл нормально завершается
Код: plaintext
1.
2.
3.
for (vector<string>::const_iterator it = tools.begin(); it != tools.end(); ++it){
  cout << "*(it2) = " << *(it) << endl;
}


Я, конечно, попробую убрать
Код: plaintext
1.
2.
  stmt_insert -> setString(1, (*(it)).c_str());
  stmt_insert -> executeUpdate();


но тогда не будет разницы с закомментированной последней строкой.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38593946
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad,

Так если уже после

Код: plaintext
1.
 stmt_insert -> executeUpdate(); //проблема!  tools.size = 1550831;



tools.size = 1550831;
, то уже тут и проблема, всё остальное ненужно.
Другой вопрос -- как теперь эту проблему обнаруживать.
Ну, вот можно по tools.size <> 35 или сколько у тебя там...


значит этот executeUpdate() уже гробит всю память в хипе.


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

А вот то, что ты мог собрать эту библиотеку и своё приложение с разными рантаймами ( статическим и с .DLL ) -- это никто кроме тебя не проверит. Проверь. Это достаточно общее место, потому что порядка 50% программистов на С это не понимают.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38593957
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
Спасибо, проверю. Хотя бы заново пересобиру.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38593988
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
Пересбор библиотеки проблему устранил. Изначально использовалась библиотека, скаченная с mysql.com. Спасибо.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38594060
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad,

Так собрана то она собрана, надо ж еще и твой проект собрать, а тут ты должен знать, для какой сборки твоя библиотека была собрана.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38594203
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivGijad,
Так собрана то она собрана, надо ж еще и твой проект собрать, а тут ты должен знать, для какой сборки твоя библиотека была собрана.
Так я собирал и всё работало, пока оптимизацию не включил, а если бы во втором цикле было бы на 1 строчку меньше, глядишь проблема никогда бы и не всплыла.
...
Рейтинг: 0 / 0
Пропажа данных из vector<string>
    #38594268
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad,

Вот именно "не всплыла", но это не значит, что проблемы не было. Так что тебе еще повезло, что она обнаружила себя вовремя.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пропажа данных из vector<string>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]