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

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

06.04.2011, 22:10. Просмотров 2326. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

33
ValeryS
Модератор
7169 / 5436 / 674
Регистрация: 14.02.2011
Сообщений: 18,366
06.04.2011, 22:14 #2
szData чему равна???
ты же память не выделил
вот он и указывает в космос
1
DeadRipper
65 / 71 / 9
Регистрация: 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
29 / 31 / 3
Регистрация: 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
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:22 #7
C++
1
inet.Read_File(szData, sizeof(char)*1024, &bytes);
0
ValeryS
Модератор
7169 / 5436 / 674
Регистрация: 14.02.2011
Сообщений: 18,366
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
65 / 71 / 9
Регистрация: 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
65 / 71 / 9
Регистрация: 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
Модератор
7169 / 5436 / 674
Регистрация: 14.02.2011
Сообщений: 18,366
06.04.2011, 22:32 #15
скинь весь проект
прогоню дебагером
можешь и сам прогнать пошагово
0
DeadRipper
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 22:33 #16
ну да, теперь потому что у вас буфер выделен размером 1024 байта всего, надо видимо больше))
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:33  [ТС] #17
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<script type="text/javascript" src="/al_loader.php?act=nav&v=2673"></script>

<link rel="shortcut icon" href="/images/faviconnew.ico" />

<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<meta name="description" content="<b>ВКонтакте</b> – универсальное средство коммуникации и поиска людей,<br>которым ежедневно пользуются десятки миллионов человек. Мы хотим, чтобы друзья, однокурсники, одноклассники, соседи и коллеги всегда оставались в контакте." />

<title>В Контакте | Добро пожаловать</title>

<noscript><meta http-equiv="refresh" content="0; URL=/badbrowser.php"></noscript>

<link rel="stylesheet" type="text/css" href="/css/al/common.css?127" />
<!--[if lte IE 6]><style type="text/css" media="screen">/* <![CDATA[ */ @import url(/css/al/ie6.css?19); /* ]]> */</style><![endif]-->
<!--[if IE 7]><styээээ

Все что прочитано, даже не все линки к странице и боди нету, почему?
0
ValeryS
Модератор
7169 / 5436 / 674
Регистрация: 14.02.2011
Сообщений: 18,366
06.04.2011, 22:33 #18
кстати на чем пишешь
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
06.04.2011, 22:35  [ТС] #19
расширил до 4096, читает тоже самое, только плюсует к этому вот эту строку. Что это?
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН ННННННННННННННННННННээээ
0
ValeryS
Модератор
7169 / 5436 / 674
Регистрация: 14.02.2011
Сообщений: 18,366
06.04.2011, 22:35 #20
сдесь примерно и есть 1024
добавь буфер
0
06.04.2011, 22:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2011, 22:35

STL stack, не пойму где ошибка
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;string&gt; #include &lt;sstream&gt;...

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

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


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

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

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