Пишу простую программу, отправить запрос на сервер, принять ответ с сервера.
Для сокетов использую Эту библиотеку.
Все это делаю в блоке инилизации программы.
Создаю сокет, отсылаю запрос, все нормально.
дальше следующий код
char buf[1024]; char otvet[9999]; mysocket.set_buffer_size(sizeof(buf)); while (strstr(buf,"</html>")==0) { mysocket >> buf; strcat(otvet,buf); } mysocket.close();
компилируется, все хорошо, данные получаю правильные.
Но как только доходит до конца. (return TRUE прога вылетает с ошибкой обратся в микрософт
пишу:
mysocket.close(); delete []otvet; //ЧЕ ТУТ МОЖНО УДАЛИТЬ Я НЕ ЗНАЮ
и о чудо прога компилируется и работает, не каких ошибок
причем ей пофигу будули я удалять ответ или delete []buf;
она будет нормально работать.
Вот как можно объяснить такую сетуацию?
Проверял на WM6 в эмуляторе и на WM6.1 на своей коммуникаторе.
А>char otvet[9999];
...
А>delete []otvet; //ЧЕ ТУТ МОЖНО УДАЛИТЬ Я НЕ ЗНАЮ - Я ТОЖЕ НЕ ЗНАЮ!!!
Дружище, ты всегда удаляешь статические массивы с помощью delete?
Если да, то ты будешь получать и не такие ошибки.
Здравствуйте, Alvares, Вы писали:
A>А>>char otvet[9999];
A>
A>...
A>А>>delete []otvet; //ЧЕ ТУТ МОЖНО УДАЛИТЬ Я НЕ ЗНАЮ - Я ТОЖЕ НЕ ЗНАЮ!!!
A>
A>Дружище, ты всегда удаляешь статические массивы с помощью delete?
A>Если да, то ты будешь получать и не такие ошибки.
В этом то и странность. Я знаю что этого со статическими массивами делать не надо. Просто решил проверить и чудо, но программа заработала.
Без этой строчки она выкидывает ошибку обратится в микрософт.
Я собственно это и спрашивал почему с delete работает, а без него- нет.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alvares, Вы писали:
A>>А>>>char otvet[9999];
A>>
A>>...
A>>А>>>delete []otvet; //ЧЕ ТУТ МОЖНО УДАЛИТЬ Я НЕ ЗНАЮ - Я ТОЖЕ НЕ ЗНАЮ!!!
A>>
A>>Дружище, ты всегда удаляешь статические массивы с помощью delete?
A>>Если да, то ты будешь получать и не такие ошибки.
А>В этом то и странность. Я знаю что этого со статическими массивами делать не надо. Просто решил проверить и чудо, но программа заработала.
А>Без этой строчки она выкидывает ошибку обратится в микрософт.
А>Я собственно это и спрашивал почему с delete работает, а без него- нет.
это как вариант неопределенного поведения.
ты уверен что 1000 и 9999 чаров достаточно?!
в отладчике что происходит?!
на лицо переполнение статического буфера.
Здравствуйте, Аноним, Вы писали:
А>Пишу простую программу, отправить запрос на сервер, принять ответ с сервера.
А>Для сокетов использую Эту библиотеку.
А>Все это делаю в блоке инилизации программы.
А>Создаю сокет, отсылаю запрос, все нормально.
А>дальше следующий код
А>А>char buf[1024]; char otvet[9999]; mysocket.set_buffer_size(sizeof(buf)); while (strstr(buf,"</html>")==0) { mysocket >> buf; strcat(otvet,buf); } mysocket.close();
А>
А>компилируется, все хорошо, данные получаю правильные.
А>Но как только доходит до конца. (return TRUE прога вылетает с ошибкой обратся в микрософт
когда данные заносятся в буфер и когда делается strcat не проверяются размеры выделеной памяти, скорей всего падает из-за переполнения буфера.
А>пишу:
А>А>mysocket.close(); delete []otvet; //ЧЕ ТУТ МОЖНО УДАЛИТЬ Я НЕ ЗНАЮ
А>
А>и о чудо прога компилируется и работает, не каких ошибок
А>причем ей пофигу будули я удалять ответ или delete []buf;
А>она будет нормально работать.
А>Вот как можно объяснить такую сетуацию?
хз, похоже одна ошибка исправляет другую.