Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157

Не пойму где ошибка

06.04.2011, 22:10. Показов 4819. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, вот решил написать простенький класс для работы с интернетом и выскакивают какие-то ошибки, не пойму в чем дело, вот эти ошибки:

Run-Time Check Failure #3 - The variable 'szData' is being used without being initialized.
Первый этап обработки исключения в "0x77c370f2" в "tfbti_lib_AP.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
Необработанное исключение в "0x77c370f2" в "tfbti_lib_AP.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
Программа "[11620] tfbti_lib_AP.exe: Машинный код" завершилась с кодом 0 (0x0).


Вот код. В этом файле только прототипы

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// tfbti_motor.h - Содержит в себе класс с прототипами методов
// tfbti - The future behind the Internet - Будущее за интернетом
// Заточен под Windows XP.
#include <Windows.h>
#include <WinInet.h>
 
namespace CPPtfbti_class {
 
    // - КОНСТАНТЫ ДЛЯ РАБОТЫ С БИБЛИОТЕКОЙ
    const INTERNET_PORT IDHP = INTERNET_DEFAULT_HTTP_PORT;
    const DWORD ISH = INTERNET_SERVICE_HTTP;
    const DWORD IOTP = INTERNET_OPEN_TYPE_PRECONFIG;
    const DWORD IFKC = INTERNET_FLAG_KEEP_CONNECTION;
 
    class WIAP {
    public:
        WIAP(LPCSTR pNameBot = "AP_bot", int i = 0);
        ~WIAP();
    // Сами функции
 
    // - Есть ли подключение к интернету?
    bool is_Inet();
 
    // - Открывает библиотеку
    void Open_Internet(DWORD D = IOTP, LPCSTR N = NULL, LPCSTR N2 = NULL, DWORD flag = 0);
 
    // - Открывает соединение с интернетом
    void Open_Connection(
            
        LPCSTR site = "www.yandex.ru",
        INTERNET_PORT constant = IDHP, 
        LPCSTR N = NULL, 
        LPCSTR N2 = NULL, 
        DWORD serv = ISH, 
        DWORD i = 0, 
        DWORD i2 = 1);
 
    // - Выводит все прочитанные сайты
    void my_Sites();
 
    // - Строит запрос для входа на сайт
    void Build_Query(
 
        LPCSTR method = "GET", 
        LPCSTR path = "/",
        LPCSTR N = NULL, 
        LPCSTR N2 = NULL, 
        LPCSTR* i = 0, 
        DWORD ip = IFKC, 
        DWORD i2 = 0);
 
    // - Отправляет запрос
    bool Send_Query(LPCSTR N = NULL, DWORD i = 0, LPVOID N2 = NULL, DWORD i2 = 0);
 
    // - Читает страницу
    bool Read_File(char* szData, DWORD size, DWORD *dwBytes);
 
    // - Закрывает указанный дескриптор
    void close(HINTERNET desc);
 
 
 
    protected:
 
    int status;
    LPCSTR name_Bot;
    HINTERNET hOpen, hConnect, hRequest;
 
    };
}
Вот их реализации.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// release.cpp
#include <iostream>
#include <fstream>
#include "tfbti_motor.h"
#pragma comment(lib, "wininet.lib")
using namespace std;
 
namespace CPPtfbti_class {
    // Конструктор
    WIAP::WIAP(LPCSTR pNameBot, int i) : status(i), name_Bot(pNameBot) {}
    // Деструктор
    WIAP::~WIAP() {}
 
    // - Есть ли подключение к интернету?
    bool WIAP::is_Inet() {
        if(InternetAttemptConnect(0) != ERROR_SUCCESS)
            return false;
        return true;
    }
 
    // - Открывает библиотеку
    void WIAP::Open_Internet(DWORD D, LPCSTR N, LPCSTR N2, DWORD flag) {
        hOpen = InternetOpen(name_Bot, D, N, N2, flag);
    }
 
    // - Открывает соединение с интернетом
    void WIAP::Open_Connection(LPCSTR site, INTERNET_PORT constant, LPCSTR N, LPCSTR N2, DWORD serv, DWORD i, DWORD i2) {
        hConnect = InternetConnect(hOpen, site, constant, N, N2, serv, i, i2);
    }
 
    // - Строит запрос для входа на сайт
    void WIAP::Build_Query(LPCSTR method, LPCSTR path, LPCSTR N, LPCSTR N2, LPCSTR* i, DWORD ip, DWORD i2) {
        hRequest = HttpOpenRequest(hConnect, method, path, N, N2, i, ip, i2);
    }
 
    // - Отправляет запрос
    bool WIAP::Send_Query(LPCSTR N, DWORD i, LPVOID N2, DWORD i2) {
        return HttpSendRequest(hRequest, N, i, N2, i2);
    }
 
    // - Читает страницу
    bool WIAP::Read_File(char* szData, DWORD size, DWORD *dwBytes) {
        if(InternetReadFile(hRequest, szData, size, dwBytes)) {
            if(status) {
                ofstream file("newStr.html");
                file << *szData;
                cout << *szData;
                return true;
            }
            cout << *szData;
            return true;
        }
        return false;
    }
}
Вот как я их вызываю.

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
#include <iostream>
#include "tfbti_motor.h"
using namespace CPPtfbti_class;
using namespace std;
 
int main() {
    setlocale(0, "Russian");
    cout << "Привет" << endl;
 
    WIAP inet("Andrew Bot");
    if(inet.is_Inet()) {
    inet.Open_Internet();
    inet.Open_Connection("www.google.ru");
    inet.Build_Query();
    inet.Send_Query();
    char* szData;
    DWORD bytes;
    inet.Read_File(szData, sizeof(szData)-1, &bytes);
 
    }
    else {
        cout << "Нет интернета";
    }
 
 
    system("pause >> void");
    return 0;
}
Подскажите пожалуйста, в чем проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2011, 22:10
Ответы с готовыми решениями:

Не пойму где ошибка
#include &lt;iostream&gt; using namespace std; int main() { setlocale(0, &quot;&quot;); double a, b; char f; a = 0; f = &quot;+&quot;; ...

Не пойму, где ошибка
Всем добрый день. Недавно начал изучать С++ вот столкнулся с проблемой в одной из задач: Из матрицы размером NxM получить вектор B,...

Не пойму, где ошибка
Здравствуйте, что-то никак не разберусь в этом куске кода, и почему компилятор нашел там narrowing conversion во второй фигурной скобке...

33
 Аватар для BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:36  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ValeryS Посмотреть сообщение
кстати на чем пишешь
На VC++
0
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:37
буффер то добавил а при чтении в файл заменил на sizeof(char)*4096?

C++
1
inet.Read_File(szData, 4096, &bytes);
1
 Аватар для BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:41  [ТС]
точно =))))

Добавлено через 2 минуты
увеличил на 1000000 и там и там, при чтении читает пол страницы, а остальное НННННННН
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
06.04.2011, 22:43
Цитата Сообщение от DeadRipper Посмотреть сообщение
inet.Read_File(szData, sizeof(char)*1024, &bytes);
чтобы не забывать вызывай так
C++
1
inet.Read_File(szData, sizeof (szData)/sizeof(char), &bytes);
0
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:45
C++
1
sizeof (szData)/sizeof(char)
если бы массив был определен статически то да,
но ведь у него szData по прежнему указатель

тогда уж лучше так))

C++
1
2
3
4
#define BUF_SIZE ....
 
char* szData = new char[BUF_SIZE]
inet.Read_File(szData, BUF_SIZE/sizeof(char), &bytes);
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
06.04.2011, 22:46
пардон увлекся
0
 Аватар для BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:47  [ТС]
читает максимум 2621 символов, включая ННННН, они всегда есть, что это такое?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
06.04.2011, 22:48
тогда надо объявить макрос или константу размер буфера
иначе таких косяков будет
если в 5 местах использовать запомни все где править
0
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:49
а может быть на 2621 байте файл и кончается?

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
тогда надо объявить макрос или константу размер буфера
иначе таких косяков будет
если в 5 местах использовать запомни все где править
ага, от структурирования кода многое зависит
потом знай только меняй константу и все)

0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
06.04.2011, 22:58
погугли насчет InternetReadFile
я вот сечас нашел
В вининет InternetReadFile дожидается пока не будет заполнен весь буфер или не закачан весь ответ. У меня ответ приходит блоками, блоки разного размера. Хотелось бы чтоб InternetReadFile возвращал каждый блок сразу по его получении, чтоб его обработать, а не ждать пока придут все блоки... как это можно сделать?
Просто если сервер никак не размечает отправляемые "блоки", то у клиента нет никакой возможности их разделить. На долгом пути от сервера эти "блоки" в принципе могут многократно разбиваться на более мелкие и опять склеиваться, причём "разделение" между блоками будет выглядеть просто как некоторая произвольная задержка между группами пакетов транспортного уровня, весьма условное разделение. Всё что можно сделать, это вычитывать из соединения данные блоками фиксированного размера, либо с помощью связки InternetQueryDataAvailable + InternetReadFileEx читать то, что доступно в данный момент. Но ни то, ни другое не гарантирует, что разделение на "блоки", сделанное на сервере, сохранится на клиенте.
и вот что предлагают
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
PVOID pReadBuffer;
int   iBlockSize;      // Сюда будет писаться размер блока
bool  fData = false;
DWORD dwReaded, 
      dwBufferSize = sizeof(int);
pReadBuffer = &iBlockSize;
 
BOOL fNoReadError = TRUE;
while (fNoReadError = InternetReadFile(hRequest, pReadBuffer, dwBufferSize, &dwReaded)) // !! must be = (not ==)
{
   if (dwReaded)
   {
      if (fData)
      {
         ProcessData(pReadBuffer);  // Обрабатываете свой блок
         free(pReadBuffer);
         // Готовимся читать новый блок
         fData = false;
         pReadBuffer  = &iBlockSize;
         dwBufferSize = sizeof(int);
      } else
      {
         pReadBuffer  = malloc(iBlockSize);
         dwBufferSize = iBlockSize;
         fData = true;
      }
   } else
     break;   // все считано
}
...
1
 Аватар для BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 23:05  [ТС]
то есть в цикле желательно обрабатывать?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
06.04.2011, 23:22
Цитата Сообщение от DeadRipper Посмотреть сообщение
BUF_SIZE/sizeof(char)
Это лишнее просто BUF_SIZE
Цитата Сообщение от BTR Посмотреть сообщение
то есть в цикле желательно обрабатывать?
я так понял да
интернет програмированием не увлекался

Добавлено через 14 минут
еще
Поскольку InternetReadFile создает в кеше файл с прочитанными же данными (в папке кеша IE), то можно посмотреть там: реально ли все получил?
1
 Аватар для BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 23:28  [ТС]
ну я три года программировал на PHP. Интернет программирование нравится, потом понял что программирование интернетом не заканчивается, взялся на С++, за более мощное средство. И учить его мне намного к сожалению сложней чем ПЫХ. Но дорогу преодолеет идущий.

Добавлено через 1 минуту
К тому же на сколько я знаю, крупные проекты, такие как фейсбук, яндекс пишутся на С++. Фейсбук кстати поначалу на пыхе был написан, но с его ростом переписали на С++. Что же, буду продолжать учить плюсы, всем большое спасибо! Удачи Вам
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
06.04.2011, 23:29
еще
Нашел!!!

Для того, чтобы скачать файл, сначала используется функция InternetOpen, после чего нужно вызвать InternetOpenUrl, третим параметром нужно задать тип запроса: "Accept: */*".
Вот когда я поменял значение параметра LPCTSTR lpszHeaders с NULL на указанный, все заработало!
ну и статейка
http://rsdn.ru/article/inet/inetapi.xml
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2011, 23:29

Не пойму где ошибка
Помогите исправить код, ошибок он не выдает, но программа почему то не работает, после вводы данных ничего не происходит, ниже условие и...

Не пойму где ошибка в коде
Задача: (В задаче можно использовать только такие библиотеки и решить надо только через условные операторы.) Все проходит и решение...

STL stack, не пойму где ошибка
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;string&gt; #include &lt;sstream&gt; using namespace std; bool isOperator(const string&amp;...

Своя реализация strcpy - не пойму где ошибка!
void copy(char *p, char *q) throw (char*) { int l2 = strlen(q); //cout&lt;&lt;&quot;strlen(q)=&quot;&lt;&lt;strlen(q)&lt;&lt;&quot; strlen(p)=&quot;&lt;&lt;strlen(p)&lt;&lt;endl; ...

Простой консольный калькулятор - не пойму, где ошибка
#include &lt;stdio.h&gt; int main() { float num1,num2,res,moreCalc; char operation; ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru