Ошибка при повторном запуске
Здравствуйте.
Вот этот кусок кода (дан ниже) при повторном запуске программы выдает ошибку:
terminate called after throwing an instance of 'std::ios_base::failure' what(): basic_ios::clear
Я так понимаю, нужно очистить буфер ошибок, что я и делаю: content.clear(); pageHead.clear();
, но тем не менее ошибка все равно остаётся. Это моя первая программа, так что готов к любой критике. Собирается под виндой minGW32, curl+ssl+zlib также собран под виндой. Все библиотеки и заголовки закинуты в папку MinGW, в общем, все вроде бы как нужно.
Это кусок кода, в котором проблема (элемент данные и функция мейн с вызовом я упустил, так как несущественно):
curl_handle = curl_easy_init();
// задаем адрес страницы
curl_easy_setopt(curl_handle, CURLOPT_URL, url_prime.c_str() );
content.clear(); //предварительная очистка переменной-буфера
// сохраняем html код cтраницы в строку content
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &content);
pageHead.clear(); //предварительная очистка переменной-буфера
// Загловок ответа сервера выводим в pageHead
curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, write_head);
curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, &pageHead);
curl_easy_setopt(curl_handle, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0");
curl_easy_setopt(curl_handle, CURLOPT_AUTOREFERER,1);// автоматически заполняет поле referer
// разрешаем авто перенаправление
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);
// max 5-ть перенаправлений
curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 5);
// разрешаем использовать куки
curl_easy_setopt(curl_handle, CURLOPT_COOKIEFILE,"");
//Выполняет отправку запроса на сервер и возвращает CURLE_OK в случае успеха, в противном случае код ошибки
resData = curl_easy_perform(curl_handle);
if (resData != CURLE_OK)
{
printf( "curl_easy_perform() failed: %s\n", curl_easy_strerror(resData) );
resData = curl_easy_perform(curl_handle);
}
Есть подозрение, что ошибка связанна с функцией записи в буфер. На просторах Интернета искал разные варианты реализации этой функции, но все, что нашел, также вылетает с ошибкой при повторном запуске.
static size_t write_data(char *ptr, size_t size, size_t nmemb, std::string* data)
{
if (data)
{
data->append(ptr, size*nmemb);
return size*nmemb;
}
else return 0; // будет ошибка
}