2014-02-08 2 views
0

Я пытаюсь создать свое первое приложение на C++, и я пытаюсь просмотреть таблицу. Однако отладчик отображает это сообщение об ошибке.Недопустимый размер выделения: 4294967295 байтов

DWORD *dwWatch = new DWORD[taille]; // <-- The error appears here. 
for (LISTSTR::iterator i = listMe.begin(); i != listMe.end(); ++i, j++) 
    { 
     dwWatch[j] = m_DirWatcher.WatchDirectory(m_strDirectoryToMonitor, dwChangeFilter, pHandler, true, NULL, NULL); 

    } 

Как исправить это, пожалуйста?

+2

Предположительно «хвост» чрезвычайно велик. Как это получилось, нам невозможно узнать. – chris

+7

Похоже, что 'taille' равен -1, который затем берется как значение' unsigned' и, таким образом, превращается в очень большое число. –

+0

также не забудьте инициализировать 'j' в вашей петле – mb84

ответ

2

Реальное значение taille равно -1, потому что 4294967295 из unsigned int и -1 подписанных int являются 0xffffffff в памяти.

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

+1

В 32-разрядных машинах с дополнениями 32 бит; стандарт не дает таких гарантий. –

Смежные вопросы