Форум программистов, компьютерный форум CyberForum.ru

Отладка: _free_base “Error reading register value” - C++

Восстановить пароль Регистрация
 
 
Draiget
 Аватар для Draiget
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 31
Завершенные тесты: 2
24.09.2014, 23:12     Отладка: _free_base “Error reading register value” #1
Доброго времени суток, имеется сей код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
std::fstream f_hStream;
f_hStream.open("<file>", ios_base::binary | ios_base::in);
...
unsigned long size = 0;
...
f_hStream.read( reinterpret_cast< char* >( &size ), 8 );
 
if (size > 0){
    char buff[126];
    f_hStream.read(buff, size);
    string cut_header = zCrypto::from_base64( string(buff, size) );
 
    if ( cut_header.length() == 0 ) break;
                
    string dec = zCrypto::decrypt( cut_header ); //Ошибка тут <<<
    printf( "Header >> %s\n", dec.c_str() );
    vector<string> header = split(dec, ';');  //Ошибка тут <<<
 
    ...
                
} else {
    break;
}
...
Функция дешифровки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const char* zCrypto::decrypt(const std::string& str_in) {
    const string key = zCrypto::from_base64("<base_64line_here>");
    const string iv = zCrypto::from_base64("<base_64line_here>");
 
    std::string str_out;
    CryptoPP::CBC_Mode<CryptoPP::Rijndael>::Decryption decryption((byte*)key.c_str(), key.length(), (byte*)iv.c_str());
 
    CryptoPP::StringSource encryptor(str_in, true,
        new CryptoPP::StreamTransformationFilter(decryption,
            new CryptoPP::StringSink(str_out)
        )
    );
 
    return str_out.data();
}


Через дебаггер VS ошибку выдает на это, каждая ошибка скипаеться со 2-го раза:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __cdecl _free_base (void * pBlock)
{
 
        int retval = 0;
 
 
        if (pBlock == NULL)
            return;
 
        RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));
 
        retval = HeapFree(_crtheap, 0, pBlock);
        if (retval == 0)
        {
            errno = _get_errno_from_oserr(GetLastError());
        }
}
Отладка: _free_base “Error reading register value”
Если запускать без дебаггера, программа просто прекращает работу, подскажите куда копать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2014, 23:12     Отладка: _free_base “Error reading register value”
Посмотрите здесь:

Переменная в register, операция >>, во что компилится? C++
C++ register
C++ Problems reading data
Спецификатор автоматического класса памяти, register C++
C++ underflow error reading the file
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Draiget
 Аватар для Draiget
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 31
Завершенные тесты: 2
25.09.2014, 18:53  [ТС]     Отладка: _free_base “Error reading register value” #21
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
char buff[ size ] = { };
IntelliSense: expression must have a constant value
А size это:

C++
1
2
3
4
5
int size = 0;
...
f_hStream.read( reinterpret_cast< char* >( &size ), 4 );
if (size > 0){
...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
25.09.2014, 18:56     Отладка: _free_base “Error reading register value” #22
Тогда вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
if ( size > 0 ) {
   ...
   char *buff = new char [ size ]();
   f_hStream.read( buff, size );
   
   if ( f_hStream.gcount() == 0 ) break;
 
   string dec;
 
   zCrypto::decrypt( dec, string( buff ));
   ...
   delete [] buff;
} else {
...
Draiget
 Аватар для Draiget
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 31
Завершенные тесты: 2
25.09.2014, 19:08  [ТС]     Отладка: _free_base “Error reading register value” #23
Цитата Сообщение от Toshkarik Посмотреть сообщение
Тогда вот так:
Ну, теперь снова 2 ошибки на zCrypto::decrypt( dec, string( buff ));, только уже разные.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void operator delete(
        void *pUserData
        )
{
        _CrtMemBlockHeader * pHead;
 
        RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));
 
        if (pUserData == NULL)
            return;
 
        _mlock(_HEAP_LOCK);  /* block other threads */
        __TRY
 
            /* get a pointer to memory block header */
            pHead = pHdr(pUserData);
 
             /* verify block type */
            _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)); // Ошибка тут <<<
 
            _free_dbg( pUserData, pHead->nBlockUse );
 
        __FINALLY
            _munlock(_HEAP_LOCK);  /* release other threads */
        __END_TRY_FINALLY
 
        return;
}
 
#endif  /* _DEBUG */
+
C++
1
2
3
4
5
6
7
8
9
10
11
12
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
        const void * pUserData
        )
{
        if (!pUserData)
            return FALSE;
 
        if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
            return FALSE;
 
        return HeapValidate( _crtheap, 0, pHdr(pUserData) );
} // Ошибка тут <<<
Миниатюры
Отладка: _free_base “Error reading register value”   Отладка: _free_base “Error reading register value”  
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
25.09.2014, 19:15     Отладка: _free_base “Error reading register value” #24
Вот здесь, как я понимаю, так:

C++
1
2
3
4
byte key[] =  "<base_64_line>";
byte iv[] = "<base_64_line>";
 
CryptoPP::CBC_Mode<CryptoPP::Rijndael>::Decryption decryption( key, 32, iv );
?
Если да, то здесь выход за пределы. Вы указали размер 32, хотя на самом деле размер этих массивов меньше.
Draiget
 Аватар для Draiget
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 31
Завершенные тесты: 2
25.09.2014, 19:23  [ТС]     Отладка: _free_base “Error reading register value” #25
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вот здесь, как я понимаю, так:
Тут указывается размер ключа, размер iv берется по BlockSize, т.е. 16.
C++
1
2
3
4
5
CipherModeFinalTemplate_CipherHolder(const byte *key, size_t length, const byte *iv)
{
    this->m_cipher = &this->m_object;
    this->SetKey(key, length, MakeParameters(Name::IV(), ConstByteArrayParameter(iv, this->m_cipher->BlockSize())));
}
C++
1
2
3
4
5
6
7
8
9
10
byte key[] = { 0x02, ..., 0x04 }; // 32 символа
byte iv[] = { 0x6a, ..., 0x41 }; // 16 символов
 
CryptoPP::CBC_Mode<CryptoPP::Rijndael>::Decryption decryption(key, 32, iv);
 
CryptoPP::StringSource decryptor(str_in, true,
    new CryptoPP::StreamTransformationFilter(decryption,
        new CryptoPP::StringSink(str_out)
    )
);
Ну и на всякий случай, я проверил вот таким способом:
C++
1
2
CryptoPP::CBC_Mode<CryptoPP::Rijndael>::Decryption decryption;
decryption.SetKeyWithIV(key, 32, iv, 16);
Аналогичные ошибки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2014, 19:36     Отладка: _free_base “Error reading register value”
Еще ссылки по теме:

C++ Про спецификатор Register
access violation reading location C++
Access violation reading location C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
25.09.2014, 19:36     Отладка: _free_base “Error reading register value” #26
Повторюсь, я не знаю эту библиотеку. Но опять же - проблема с памятью. Что то пытается освободить то, что не было выделено. Или пытается записать туда.
Yandex
Объявления
25.09.2014, 19:36     Отладка: _free_base “Error reading register value”
Ответ Создать тему
Опции темы

Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru