Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.10.2014
Сообщений: 30
1

Syscall param socketcall.send(msg) points to uninitialised byte(s)

13.06.2015, 20:56. Показов 1442. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Гугл не помог, потому снова бегу к вам за помощью
Valgrind пишет
==4090== Syscall param socketcall.send(msg) points to uninitialised byte(s)
==4090== at 0x4242D91: send (socket.S:63)
==4090== by 0x804B8B0: CHtml::download(std::string const&, int, _IO_FILE*) (in /home/debian/sem/1/a.out)
==4090== by 0x804A83C: CDownloading_stuff::head(std::string const&, int) (in /home/debian/sem/1/a.out)
==4090== by 0x8049A87: main (in /home/debian/sem/1/a.out)
==4090== Address 0xbe9b57b2 is on thread 1's stack
==4090== Uninitialised value was created by a stack allocation
==4090== at 0x804B5BC: CHtml::download(std::string const&, int, _IO_FILE*) (in /home/debian/sem/1/a.out)
Ошибка насколько я понимаю здесь, как-то я неправильно зову send.
По сути остальное неинтересно, но на всякий случай кину более детальный кусок кода;
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
void download ( const string &adress, const char host_name ) // host_name - имя хоста которому шлем сообщение, adress - запрашиваемый адресс на скачку.
//-----------------Preapeare message-----------------------------------------
    string workspace;
    char buf[BUFSIZE];
    char message[999];
    string get = "GET ";
    string b = " HTTP/1.0\r\nHost: ";
    string s = "\r\n"
               "User-Agent: main.cpp\r\n\r\n";
    stringstream conversion;
    conversion<<get<<adress<<b<<host_name<<s;
    conversion.read(message,999);
    
//----------------Sending socket-----------------------------------------------              
    int sock;
    struct sockaddr_in addr;
    struct hostent* raw_host;
    raw_host = gethostbyname(host_name); 
    if (raw_host == NULL)
    {
        cout<<"Host error: "<<host_name<<endl;
        return ;
    }
    sock = socket(AF_INET, SOCK_STREAM, 0);                                     //domain AF_INET cause we work with Internet, type SOCK_STREAM for data transfer cause it's good, 0 protocol means default protocol cause I don't care
    addr.sin_family = AF_INET;                                                  //domain AF_INET
    addr.sin_port = htons(80);                                                  //Host TO Network Short. 80 number
    bcopy((char *)raw_host->h_addr,(char *)&addr.sin_addr, raw_host->h_length); //copy hostname
    if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
       std::cerr<<"connect error"<<std::endl;
       close (sock);
       return;
    }
       
    send(sock, message, sizeof(message), 0); // leaky здесь
 
    int rc;
    while(1) 
    {
        rc=recv( sock, buf, sizeof(buf)-1, 0 ); 
        if ( rc <= 0 ) break;
        buf[rc]='\0';
        workspace.append(buf);                                          
    } 
}
Добавлено через 5 часов 19 минут
Что, никто не сталкивался с сокетами?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2015, 20:56
Ответы с готовыми решениями:

net send, msg или альтернатива для локальной сети
Доброго времени суток! В Windows Server 2008 отключена команда net send, альтернативой которой...

Delphi send byte
procedure TForm1.Button1Click(Sender: TObject); var x: array of byte; begin x:= $FF; end; ...

ActiveX, JavaScript, send byte array
Доброго времени суток, коллеги. Интересует ответ на такой вопрос: можно ли средствами javascript...

Не могу XSD схему написать для такого элемента: <param name="0123 456789</param>
Народ Че-то под вечер затупил - не могу XSD схему написать для такого элемента: &lt;param name=&quot;0123...

2
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
13.06.2015, 21:06 2
Может я чего-то не понимаю.. в чём проблема?
0
0 / 0 / 0
Регистрация: 29.10.2014
Сообщений: 30
13.06.2015, 21:24  [ТС] 3
Валгринд ошибки выдает о плохой работе с памятью, но я уже докопался в чем дело
message должен быть const char * и 3-им параметром send будет strlen(message) соответственно
Ну так, вдруг кто тоже с таким столкнется

ПС как свой ответ сделать лучшим
0
13.06.2015, 21:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2015, 21:24
Помогаю со студенческими работами здесь

UPDATE where t1.param=t2.param КАК?
Добрый вечер всем! Подскажите пожалуйста, как правильно написать апдрейт таблицы с параметрами,...

Нельзя преобразовать тип function(a: byte;b: byte): byte к integer (Списки)
Создать список из целых чисел.Поменять в списке местами максимальный и минимальный элементы...

syscall и сообщение процессов
Доброго времени суток! Хотел бы задать вопрос: Имеется работающее приложние почти типа &quot;hello...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru