Здравствуйте, Аноним, Вы писали:
А>calc А>newsreader А>Примеры вылетают с ошибкой, отладчик ругаеться на переменую lpszBuffer, куда я ее не двигал не помагало.
Телепаты тоже вылетели с ошибкой и ругаются на отсутствие конкретики в сообщении.
Хоть бы код привёл и что именно говорит отладчик.
Вот блин устроили ромашку "Transfer-Encoding: chunked" там, поэтому HttpQueryInfo не может определить Content-Length.
Раз уж отладчик в руках, и видно, что указатель на буфер равен нулю, то неужели так сложно пройтись пошагово по коду запроса и получения ответа, проверяя ключевые переменные?
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, adad, Вы писали:
A>>
A>>DWORD CHTTPReader::GetDataSize ()
A>>
К>Вроде написано правильно.
К>На будущее: не запихивай цитаты в тэг [code]!!!
К>Ассерты расставил? Дебаггер запустил? Подрывается на ассертах или по-прежнему access violation?
Да эфект есть, изменил код примерно следующим образом
Вылетает при проверке m_lpszDataBuffer, тоесть она равняеться NULL.
Ставил ассерт перед вызовом InternetReadFile, так же срабатывает и перед строчкой на которой вылетает отладчик в первых постах, тоже срабатывает.
Проверив на NULL другие переменые которые там участвуют оказалось что lpszBuffer, dwSize тоже принимают Null перед вызовом InternetReadFile.
Примеры из wininet
От:
Аноним
Дата:
26.09.09 15:44
Оценка:
calc
newsreader
Примеры вылетают с ошибкой, отладчик ругаеться на переменую lpszBuffer, куда я ее не двигал не помагало.
12.11.09 01:13: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Аноним, Вы писали:
А>>calc А>>newsreader А>>Примеры вылетают с ошибкой, отладчик ругаеться на переменую lpszBuffer, куда я ее не двигал не помагало.
К>Телепаты тоже вылетели с ошибкой и ругаются на отсутствие конкретики в сообщении. К>Хоть бы код привёл и что именно говорит отладчик.
Отладчик вылетает с этим:
Unhandled exception at 0x0043c384 in newsreader2.exe: 0xC0000005: Access violation writing location 0x00000000.
Здравствуйте, Vamp, Вы писали:
V>Похоже на то, что выходишь за границу lpszBuffer. Где он определяется? Чему равен dwSize?
Похоже, что никто никуда не выходит, а lpszBuffer тупо равна NULL.
Нужно посмотреть код, который
— устанавливает загадочную (нигде выше не упомянутую) m_lpszBuffer
— вызывает ReadBuffer() — и что туда передаёт в качестве lpszBuffer
Вообще то тут что то с размером буфера то есть программа съедает страницы маленькие, а с большими ошибка.
Я протестил на localhost она удачно приняла надпись hello world.
Здравствуйте, adad, Вы писали:
A>Вообще то тут что то с размером буфера то есть программа съедает страницы маленькие, а с большими ошибка. A>Я протестил на localhost она удачно приняла надпись hello world.
4 гипотезы:
1) Неправильный порядок действий, почему-то не выполнили инициализацию буфера (не обнуление, а размещение, я имею в виду).
2) Во время инициализации произошла ошибка, которую не обработали.
3) Подсунули не тот буфер (не того объекта CHTTPReader, например).
4) Расстреляли память — прокатились по стеку, по куче, по объекту CHTTPReader...
Я начал бы с того, что напихал всюду, где только возможно, ассертов.
Самых тривиальных:
— (this != NULL),
— (m_lpszDataBuffer != NULL),
— (m_lpszDataBuffer == lpszBuffer),
— (dwDataSize <= m_dwBufferSize)
— (lpdwBytesRead != NULL) непосредственно перед вызовом InternetReadFile
— (*lpdwBytesRead <= dwDataSize) непосредственно после вызова
Посмотрел бы на GetDataSize(). Нет ли ситуаций, когда эта функция возвращает мусор? Например, (DWORD)(-1) = 0xFFFFFFFF
Здравствуйте, adad, Вы писали:
AA>Ставил ассерт перед вызовом InternetReadFile, так же срабатывает и перед строчкой на которой вылетает отладчик в первых постах, тоже срабатывает. A>Проверив на NULL другие переменые которые там участвуют оказалось что lpszBuffer, dwSize тоже принимают Null перед вызовом InternetReadFile.
Они "принимают значение" или оно там изначально было?
Но в любом случае, дальнейшая отладка будет тривиальной (если только это не адский запил по памяти).
о том, что буфер банально не создается (поэтому и равен NULL), из-за того что GetDataSize возвращает 0, из-за того что HttpQueryInfo возвращает ошибку, из-за того что ответ от сервера приходит с "Transfer-Encoding: chunked" не подходит в качестве причины?
о том, что буфер банально не создается (поэтому и равен NULL), из-за того что GetDataSize возвращает 0, из-за того что HttpQueryInfo возвращает ошибку, из-за того что ответ от сервера приходит с "Transfer-Encoding: chunked" не подходит в качестве причины?
Но страницы меньшего размера проходят, почему в других ситуациях буфер не создаеться?
A>Но страницы меньшего размера проходят, почему в других ситуациях буфер не создается?
в этих случаях, когда все обрабатываются нормально, тоже присутствует "Transfer-Encoding: chunked" в ответах сервера?