1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||||||||||||
1 | ||||||||||||||||
Отладка: _free_base “Error reading register value”24.09.2014, 23:12. Показов 4107. Ответов 25
Метки нет (Все метки)
Доброго времени суток, имеется сей код:
Функция дешифровки:
Через дебаггер VS ошибку выдает на это, каждая ошибка скипаеться со 2-го раза:
Если запускать без дебаггера, программа просто прекращает работу, подскажите куда копать?
0
|
24.09.2014, 23:12 | |
Ответы с готовыми решениями:
25
Ошибка v2_int128 = {<error reading variable>, <error reading variable>} Ошибка в Business Connector: error reading packages/SAP/code/jars/static/inqmyxml.jar; reading zip file central directory failed Ошибка: Parse error: syntax error, unexpected T_STRING in Z:\home\zateryaniezemli.ru\www\register.php on line 30 Use of register assumed to error |
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
25.09.2014, 00:25 | 2 |
1. Вы уверены, что читаете правильно стартовые байты? Вы читаете 1 байт в переменную размером 4 байта. Это не смертельно, но не совсем стыковка логики.
2. Вы уверены что size >= 126? Я думаю ошибка в этом. Вы просто трете стек. 3. Зачем Вам zCrypto::from_base64 на буфер? 4. Слишком много копирования буфера. Подумайте как избежать этого.
1
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
|
25.09.2014, 12:01 [ТС] | 3 |
1. Разве у нас unsigned long не 8, или вы о другом?
2. Тут я пытался задавать буфер так-же по size, но разницы никакой, размер там около 44+- везде, думаю не в этом проблема. 3. Попробую без него сделать.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
||||||
25.09.2014, 13:04 | 4 | |||||
1. Используйте std::string как буфер.
2. Вы уверены что Вы читаете сколько просите?
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
25.09.2014, 14:46 | 5 | |||||
Draiget, в linux на 64 битной системе long 8 байтный. В linux x86 и в Windows x86/x64 он 4 байта.
Добавлено через 1 минуту Draiget, хотя, если Вы уверены, что размер хранится в 8 байтах, то используйте long long. Он везде 64 битный.
1
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||||||||||||
25.09.2014, 16:20 [ТС] | 6 | |||||||||||||||
fstream::read не возвращает size_t, только std::basic_istream, ну и писать в &buf.c_str() невозможно, если только так:
п.с. Поправил размер до 4х, думаю больше даже и не понадобиться, шарп пишет 8 байт при конверте ulong, поменял там на int32 и нормально стало. Небольшое дополнение, вторая ошибка которая была на
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
25.09.2014, 16:37 | 7 | |||||
Во-первых:
std::string::data() возвращает указатель на внутренне представление строки в виде C-массива. Он действителен до тех пор, пока Вы не изменили строку. Во-вторых ( вытекает из первого ): После возвращения из функции decrypt объект str_out разрушается, следовательно указатель, который возвращает std::string::data() невалиден.
И еще - в C++98 не гарантируется, что последовательность, на которую указывает возвращаемый функцией std::string::data() указатель, будет заканчиваться символом конца строки ( '\0' ). Функция std::string::c_str() же это гарантирует. В С++11 std::string::data() и std::string::c_str() являются синонимами и возвращают одно и то же значение.
0
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||
25.09.2014, 16:40 [ТС] | 8 | |||||
Извиняюсь, засунул старый код дешифровки в первый пост, я закоментил строки от старого и в аргументах был только const std::string& str_in, в качестве возвращаемое значения был std::string.
А если таким образом? Сие работает, но ошибки не пропали.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
25.09.2014, 16:56 | 9 | |||||
Ну раз с этим разобрались, тогда продолжаем. Что происходит в конструкторе Decryption?
Меня сильно смущает вот эта запись:
Добавлено через 10 минут Непонятно, почему Вы используете std::string, когда в документации к Crypto++ везде используется собственный тип byte и SecByteBlock. Думаю, Вам нужно использовать именно их. Посмотрите пример вот здесь: http://www.cryptopp.com/wiki/CBC_Mode
1
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||
25.09.2014, 17:12 [ТС] | 10 | |||||
pBlock - Variable is optimized away and not available.
retval - Error reading register value. Немного скриншотов прилагается. Хм, поменял на следующий код и ошибки на этом месте пропали, осталась только ошибка на } else { в главном коде
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
25.09.2014, 17:28 | 11 |
Draiget, на этом месте заканчивается блок, следовательно, объекты начинают уничтожаться, вызываются их деструкторы. Ошибка в одном из них.
Вы привели ошибки отладчика, он Вам говорит, что переменная pBlock не доступна, так как была убрана при оптимизации. Отлаживайте Debug версию. Вы, по всей видимости, пробуете отлаживать Release версию. Я ранее не знаком был с данной библиотекой, и узнал о ней только в этой теме, поэтому не могу точно сказать, в чем проблема. Но, скорей всего, как и в функции decrypt, проблема в неправильном использовании типов/объектов.
0
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
|
25.09.2014, 17:37 [ТС] | 12 |
Угу, ибо я компилил Crypto++ под релизную, а под дебагом он не компилиться:
0
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||
25.09.2014, 18:02 [ТС] | 14 | |||||
Я примерно помню как под дебаг компилить, немого поковырявшись сделал, теперь ошибка немного яснее, вы были правы насчет удаления:
0
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||
25.09.2014, 18:14 [ТС] | 15 | |||||
Нашел я на каком месте он высирает ошибку, при удалении dec, проверял через delete &dec;
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
25.09.2014, 18:16 | 16 |
Так нельзя делать. Это автоматический объект, он был создан на стеке, он сам освободить занятые ресурсы в деструкторе, после чего будет удален. Ошибка в том, что где то вызывается delete для объекта, который не был создал функцией new.
0
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||
25.09.2014, 18:22 [ТС] | 17 | |||||
А если так? Ошибка то все равно на delete идет, еще до } else {. Но меня больше интересует, почему она там вообще возникает.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
25.09.2014, 18:25 | 18 | |||||
Я не смогу сказать без всего кода. Выложите его, будем разбираться. Как минимум, нужен весь блок
0
|
1 / 1 / 2
Регистрация: 02.05.2013
Сообщений: 31
|
||||||
25.09.2014, 18:32 [ТС] | 19 | |||||
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|||||||||||
25.09.2014, 18:47 | 20 | ||||||||||
Вот так делать нельзя.
И вот это не имеет смысла:
1
|
25.09.2014, 18:47 | |
25.09.2014, 18:47 | |
Помогаю со студенческими работами здесь
20
Error reading memory : IO Syntax error в Register: <%@ Register TagPrefix="sb" Namespace="SB.WebControls" Assembly="SB.WebControls"%> underflow error reading the file Ошибка RLINK32: Error reading file Вопрос по Lotus Traveler -there Was An Error Reading Your Configuratio Перестает выгружать данные Error reading data from the connection Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |