Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
#1

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

06.04.2011, 22:10. Просмотров 2215. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2011, 22:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не пойму где ошибка (C++):

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

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

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

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

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

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

33
ValeryS
Модератор
6705 / 5114 / 482
Регистрация: 14.02.2011
Сообщений: 17,182
06.04.2011, 22:14 #2
szData чему равна???
ты же память не выделил
вот он и указывает в космос
1
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:15 #3
ну во первых szData ни на что не указывает, нужно выделить память под нее

во вторых sizeof(szData)-1 равно трем, вряд ли вы хотели получить тройку, тут как я понял нужно указывать размер буфера для чтения/записи

Не по теме:


опередили)

1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:16  [ТС] #4
сейчас попробую выделить
0
ailia
28 / 27 / 1
Регистрация: 27.12.2009
Сообщений: 106
06.04.2011, 22:17 #5
переменная szData объявлена, но не инициализирована. я в работу ф-ций особо не вникал, но в main заменил бы на
C++
1
char* szData = NULL
на будущее - всегда инициализируйте адреса нулем.
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:19  [ТС] #6
выделил так, char* szData = new char[1024]; теперь работает, но читает с гугла только символ < и все, почему? Объясните пожалуйста
0
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:22 #7
C++
1
inet.Read_File(szData, sizeof(char)*1024, &bytes);
0
ValeryS
Модератор
6705 / 5114 / 482
Регистрация: 14.02.2011
Сообщений: 17,182
06.04.2011, 22:23 #8
если в гугле unicode то все правильно
первый байт символ второй 0(для С конец строки)
объяви TCHAR
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:24  [ТС] #9
Цитата Сообщение от DeadRipper Посмотреть сообщение
C++
1
inet.Read_File(szData, sizeof(char)*1024, &bytes);
все равно читает только <
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:25  [ТС] #10
Цитата Сообщение от ValeryS Посмотреть сообщение
если в гугле unicode то все правильно
первый байт символ второй 0(для С конец строки)
объяви TCHAR
гугл страницы сгенерированы без BOM, так что все норм должно быть, кстати TCHAR тоже не помогает
0
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:25 #11
C++
1
все равно читает только <
это в консоли, или в файле newStr.html тоже?


Цитата Сообщение от ValeryS Посмотреть сообщение
если в гугле unicode то все правильно
первый байт символ второй 0(для С конец строки)
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:27  [ТС] #12
с других сайтов, где кодировка виндовс 1251 тоже читает только <. Почему???? =(((

Добавлено через 19 секунд
Цитата Сообщение от DeadRipper Посмотреть сообщение
C++
1
все равно читает только <
это в консоли, или в файле newStr.html тоже?
и там и там
0
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:29 #13
C++
1
2
file << *szData;
cout << *szData;
этим вы указываете на первый байт по адресу szData
попробуйте
C++
1
2
file << szData;
cout << szData;
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:32  [ТС] #14
да, прочитал больше раз так в 200, но все равно, не все.
0
ValeryS
Модератор
6705 / 5114 / 482
Регистрация: 14.02.2011
Сообщений: 17,182
06.04.2011, 22:32 #15
скинь весь проект
прогоню дебагером
можешь и сам прогнать пошагово
0
06.04.2011, 22:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2011, 22:32
Привет! Вот еще темы с ответами:

Своя реализация strcpy - не пойму где ошибка! - C++
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; ...

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

Операции с массивами (есть логическая ошибка, не пойму где) - C++
Программа компилируется нормально. Спрашивает кол-во элементов массива. Вводятся элементы массива Считает сумму от первого до...

Конечные суммы и произведение (не пойму где ошибка в программе) - C++
Создать программу для вычисления конечной суммы и произведения. #include &lt;iostream.h&gt; #include &lt;math.h&gt; int main() { int i,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru