封装的libcurl类在使用vector时出错

环境:
系统:Windows 8专业版(32位)
IDE:VS 2013
curl库版本:libcurl-7.19.3-win32-ssl-msvc
运行时提示

0x61DE35F7 (curllib.dll) (curltest.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xFEEEFF02 时发生访问冲突。

#include "stdafx.h"
#include "curl/curl.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <io.h>


#pragma comment(lib, "curl/libcurl_imp.lib")

#define PROGNAME "curltest"
#define RETRY_TIME 5
#define URL_SIZE 100

using namespace std;

size_t print_callback(char* buffer, size_t size, size_t nitems, void *outstream)
{
    return nitems;
}

size_t write_callback(char* buffer, size_t size, size_t nitems, string &text)
{
size_t sizes = size * nitems;
string temp(buffer, sizes);
text += temp;
return sizes;
}

int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
printf("%.1f%%\t", 100 * (dlnow / dltotal));
cout << "\r";
cout.flush();
return 0;
}

class Novel
{
private:
CURL *eh;
CURLcode res;
int http_code;
int retry_time;
public:
int id;
double filesize;
bool is_exist;
char *url = new char[URL_SIZE];
string *text = new string;
Novel(int id)
{
    this->id = id;
    retry_time = RETRY_TIME;
    sprintf_s(url, URL_SIZE, "dl.wenku8.cn/down.php?type=txt&id=%d", id);
    eh = curl_easy_init();
    curl_easy_setopt(eh, CURLOPT_URL, url);
    curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, print_callback);
    curl_easy_setopt(eh, CURLOPT_NOPROGRESS, 1);
    curl_easy_setopt(eh, CURLOPT_PROGRESSFUNCTION, progress_callback);
    curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1);
    curl_easy_setopt(eh, CURLOPT_HEADER, 1);
    curl_easy_setopt(eh, CURLOPT_NOBODY, 1);
    res = curl_easy_perform(eh);
    curl_easy_getinfo(eh, CURLINFO_HTTP_CODE, &http_code);
    if (http_code == 404)
    {
        is_exist = false;
        filesize = -1;
        return;
    }
    else
        is_exist = true;
    curl_easy_getinfo(eh, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize);
}
int start()
{
    if (is_exist == false)
    {
        cerr << "文件不存在" << endl;
        return 1;
    }
    else
    {
        curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, write_callback);
        curl_easy_setopt(eh, CURLOPT_NOBODY, 0);
        curl_easy_setopt(eh, CURLOPT_HEADER, 0);
        curl_easy_setopt(eh, CURLOPT_NOPROGRESS, 0);
        curl_easy_setopt(eh, CURLOPT_WRITEDATA, text);
        cout << "正在下载 " << id << ".txt" << endl;
        res = curl_easy_perform(eh);
        if (res != CURLE_OK)
        {
            cerr << curl_easy_strerror(res) << endl;
            return -1;
        }
        cout << "下载完成" << endl;
    }
    return 0;
}
~Novel()
{
    curl_easy_cleanup(eh);
    delete[] url;
    delete text;
}
};

int main(int argc, char *argv[])
{
/*
    int retry_time = RETRY_TIME;
    int id = 1;
    vector<Novel> vNovel;
    for (id = 1; retry_time!=0; id++)
    {
        vNovel.push_back(id);
        if (vNovel[id - 1].start())
        {
            retry_time--;
        }
        else
        {
            retry_time = RETRY_TIME;
        }
    }
    getchar();
    vNovel.clear();    // 这句出错
*/
// 上面是出错的地方,下面无错
    Novel test(1);
    test.start();
    getchar();
    return 0;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
libcurl 7.51.0 封装库,支持libzip,http,https
对 libcurl-7.51.0的封装库,全新编译,接口丰富,简单易用,支持http,gzip解压缩,https,无需复杂的设置,具体使用方法可参考本人博客: http://blog.csdn.net/antihips/article/details/51752545
c++ libcurl使用(使用类)
libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你
VS2015静态编译libcurl(C++ curl封装类)
VS2015静态编译libcurl(C++ curl封装类)
C++ 基于libcurl的http客户端
当使用C++想要实现HTTP客户端时,目前通用的做法就是使用libcurl。本文主要分享的是一个基于libcurl的HTTP封装类,其功能包括:同步的(HTTP/HTTPS)GET、POST请求,以及文件下载和进度报告。 头文件代码: #ifndef __BASE_EASY_CURL_H__ #define __BASE_EASY_CURL_H__ #include #include
C++ curl封装类
对libcurl进行的封装,非常好用
libcurl的封装库 libSkyChaserHttp,支持gzip,http,htpps,功能齐全
对libcurl-7.51.0的封装,集合libzip,openssl,所以支持gzip自动解压缩,https请求,接口丰富,支持cookies管理,额外添加cookie,支持get/post到std::string,文件。以及编码转换,URL编码解码,base64编码解码等常用函数。
简单封装 libcurl
用到的库: libcurl(必须) boost(非必须) 其中,boost 库用作编码转换(当然了如果你不转换编码我也拦不了你…) 这个样例不仅有 get / post 操作,我还扔进去了 string转wstring / wstring转string urlEncode / urlDecode getTimeStamp mergeCookies findText 头文件(Network.h):
将libcurl封装下载类
这里我将libcurl封装成了DLL,可以通过导出类指针进行函数调用,可以进行下载暂停、下载恢复、断点续传、获取下载速度、进度等等功能,不多说,上代码! DownloadDLL.h #pragma once #ifdef DLL_DOWNLOAD #define DLLAPI _declspec(dllexport) #else #define DLLAPI
libcurl 7.51.0 封装库( V2.0.0.1 ),支持libzip,http,https
对 libcurl-7.51.0的封装库(VS2010),全新编译,接口丰富,简单易用,支持http,gzip解压缩,https,无需复杂的设置,具体使用方法可参考本人博客: http://blog.csdn.net/antihips/article/details/51752545
MFC中使用vector出错
首先包含的头文件 #include       定义 vector m_str    编译出错 error C2143: syntax error : missing ';' before '             error C2501: 'vector' : missing storage-class or type specifiers             error C21
分享个C++封装Libcurl代码(支持下载文件、GET\POST、重定向断点续传等功能)
前言 前面分享过一个Windows上封装Winhttp和WinInet API的代码,结果下载页好评特别多(呵呵),谢谢大家赏脸。文章地址:开源一个C++实现的简单HTTP协议处理库,里面有代码资源下载地址。但是,在实际开发过程中我发现WinHttp API严重依赖微软的IE组件,下载过程中会出现些很少见的异常。(比如下载文件和使用chrome浏览器下载的文件不一样。。。。)因此,有必要替
curl的简单封装(c++版本)
curl的简单封装(c++版本) curl的基本实现功能 (1). get , post , put, delete 发送数据 (2). 上传文件 (3). 下载文件 辅助代码,线程锁的实现 (1). curl_global_init 不是线程安全的通过锁机制 (2). curl_global_cleanup 不是线程安全的通过锁机制 /*
关于vector在类中的声明用法
 转自:https://blog.csdn.net/biechusheng231/article/details/80034126最近在学习使用vector类,发现使用时,在类的头文件中报错,声明大概如下[cpp] view plain copyclass Student  {  public:      Student();      ~Student();      private:     ...
一个非常好用的curl封装类
如果你对curl不熟悉,如果你想要了解curl,这个类你值得拥有,常用的方法已经封装好。
CURL C++封装
CURL C++封装,功能包括:HTTP\HTTPS、POST、GET、表单提交、文件下载、UTF-8转码、说明文档
libcurl库封装
此封装我是对libcurl库进行的一个请求封装支持get和pos请求,无效做libcurl初始化和释放,直接使用CUrlHttp::Request静态调用方法就可以了,前提是包含UrlHttp.h头文件
libcurl进行文件下载类项目开发
Libcurl使用介绍: 四个关键函数: 1. curl_easy_init() 初始化curl环境, 新建curl对象, 返回对象句柄, 使用举例:    CURL *handler = curl_easy_init(); 2. curl_easy_setopt() 各种设置, 包括URL设置等, 使用举例:    curl_easy_setopt(handler, CURLOPT_UR
并行原理分析(libcurl+epoll)
yar框架的并行原理分析(libcurl+epoll) 标签: 框架异步phpcepoll 2015-11-01 13:01 76人阅读 评论(0) 收藏 举报  分类: C(7)  作者同类文章X PHP(6)  作者同类文章X 版权声明:本文为博主原创文章,未经博主允许不得转载。 yar是一个轻量级的ph
libcurl库简单封装,支持https
libcurl库简单封装,支持https,资源里面有https的demo以及http的lib库
使用string与vector时的一些注意事项
今天写dfs代码的时候,一直出错。出错代码为: string toStr(int num, int n) { string res(n, '0'); //这里应该是'0' int cnt = n-1; while (num) { res[cnt--]=num%2+'0'; //这里应该是'0' num
libcurl库(C++)快速使用
简介libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP这些协议,同时支持使用SSL
VS2013在Release情况下使用vector有时候会崩溃的一个可能原因
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5016352.html   参考网址: http://www.cnblogs.com/BryZ/archive/2011/06/21/2085865.html http://www.cppblog.com/super-/archive/2009/06/18/88006.as
libcurl 总结 cjson打包案例
Libcurl的使用可以查阅 libcurl 网页上的文档。比较重要的是使用 libcurl 提供的options ,参考下面的网页。 https://curl.haxx.se/libcurl/c/easy_setopt_options.html 一般过程就是 1.创建curl对象 2.为对象添加optiions 3.执行curl 4.调用cleanup 实例: #incl
Qt中使用libcurl开发post中文名称的图片时遇到的问题
        因为业务需要,我要在qt中实现使用libcurl上传图片,但是其中遇到一点问题;在上传英文和数字名称的图片的时候都没有问题,但是在上传中文名的时候,到达服务器的图片没有问题,但是名称是乱码。一顿检查,最后发现是我上传的是GBK,而服务器进行处理全部转化为UTF-8因此不能识别导致乱码,这个时候,我们需要将本地的图片转为UTF-8。        其中部分代码如下: QFileInf...
OpenCV 释放 vector 内存莫名崩溃的问题
当我想通过 swap 释放成员变量的 vector的内存时,总是Crash,断点进去Crash的位置也很诡异:Crash 位置 :还以为是内存没有对齐的问题,结果加了#pragma pack(4) // 1, 2, 4也是枉然。。。 T_T局部变量vector的自动释放 Crash 位置:而且同样的代码在OpenCV 3.1.0上是正常的!诡异的我都快怀疑人森的时候,终于上帝让我找到了这篇文章!看
vector::erase()函数调用出错问题
vector::erase()函数调用出错问题 vector::erase()方法有两种重载形式 iterator erase(   iterator _Where);//删除某个元素 iterator erase(   iterator _First,   iterator _Last);//删除一段元素,注意是个半开区间 返回值: 如果是删除指定位置的元素时,返回
libcurl下载文件简易demo
size_t test_save(void *ptr, size_t size, size_t nmemb, void *stream) { size_t sizes = size * nmemb; DWORD dwHasWritten; WriteFile((HANDLE)stream,ptr,sizes,&dwHasWritten,NULL); return s
libcurl库的使用支持http、https、ftp(上传、下载、远端目录列表获取)
这里是libcurl库的一个简单封装,支持跨平台。声明:    本文章可以转载,但必须注明源博客地址。共享的demo和curltools类不允许个人上传网络赚取积分和现金,如有发现必定追究责任,请慎重。直接下载我上传的资源把curl文件夹解压到工程代码目录下导入curltools头文件和源文件到工程中,方可直接使用。封装的源码下载地址:http://download.csdn.net/downlo...
libcurl 多线程使用注意事项(转载)
转载地址:http://blog.csdn.net/jaylong35/article/details/6439549 1、问题来源,多线程使用Libcurl导致程序跑一段时间后自己退出,没有明显的异常。找不到合适的BUG。   最后通过查看资料和网上找的一些文章,发现,原来是信号处理的问题:     CURLOPT_NOSIGNAL
STL 简单 vector 的实现
我是照着侯捷老师的《STL源码剖析》做的cghSTL,现在才看到第三章,忽然觉得这本书的编排非常适合自学。 第一章讲解空间配置器,这是STL最基础的部件,没什么好说的。 第二章讲解迭代器,老师举了单向链表的例子,这非常有考究,单向链表不需要连续的存储空间,意味着使用单向链表实现的容器不需要考虑空间溢出等问题,我们可以把注意力集中在容器的迭代器上。 第三章讲解序列式容器,一来说怎么实现vect
qt5搭建libcurl环境
1.安装QT5的注意事项安装qt5说起来非常简单,但是经常出错,有时候是装上之后运行QT creator的时候出现错误。下面介绍一个我测试过没有问题的安装方法: 首先是qt5建议安装qt5.5.0等公认的稳定性比较好的版本,不要随便找个版本就安装。推荐一个下载地址http://mirror.bit.edu.cn/qtproject/archive/qt/5.5/5.5.0/打开这个地址,看一看到里...
libcurl 使用记录1(回调函数出错)
昨天使用libcurl api 进行url抓取,想分别获取header和body 存入字符串进行相应的处理。从官网的用例中找到了写文件、写struct的例子。改造之后发现回调过程中出core。 (1)CURLOPT_WRITEFUNCTION和CURLOPT_HEADERFUNCTION 使用过程中发现,仅实现CURLOPT_WRITEFUNCTION就可以获得header和body。 实现
关于已经初始化的vector使用assign函数后出现元素访问越界
因为assign()函数会在赋值的时候调整原向量的size,而capacity保持不变。 以下是C++文档 中的具体描述: Assign vector content Assigns new contents to the vector, replacing its current contents, and modifying its size accordingly.
java curl开发记录(二) linux系统下jni封装curl,android java使用curl
java curl开发,在linux系统上,通过jni对libcurl进行封装。 开发环境:ubuntu 15.04 64位,jdk 1.7
libcurl库进行http通讯-基于 C 的 HTTP 客户端
之前两篇博客介绍了一些最简单的基本知识,今天就来应用一下,写一个HTTP客户端。 以下有些内容,参考出处: http://www.oschina.net/question/54100_8602首先包含curl的头文件。 接下来,定义了两个用于传输的变量。第一个变量是 wr_buf,表示将在其中写入传入数据的缓冲区。wr_index表示缓冲区的当前写入索引。看看 main函数,该函数使用 eas
libcurl动态库的编译使用时遇到的坑
这开源代码下过来还是可以的,有windows下各种版本的vs的sln,用VS2013就打开了,选好选项,编译也成功了。   然后新开了了个工程,添加了include路径和lib路径,然后编译出现了:   知道C和C++编译时函数换名且眼尖的一定看出了问题:哪里来的“__imp__“!!!!!   curl.h里可是标标准准的用了宏: #ifdef __cplusplus exte
vector中元素为类对象时的一些使用方法
通常要使用一个vector来存放一些类对象时,基本都是使用以下的方法: 1.vector labels(1000),这里则是使用Label类的默认无参构造函数来实现该vector的初始化(这里假设Label为自己定义的类); 2.若要考虑Label的带参构造函数,则使用这种方式:vector labels(1000  , Label(5)),这里假设Label的带参构造函数需要一个int参数,
libcurl基础教程及封装(支持同步异步请求,支持多线程下载,支持https)
最近在做一个项目,需要用到http get post等 需求分析需要做到同步和异步,异步请求的返回以可选的回调通知的方式进行。 本人以Linux为例,一步一步的来实现。 配置并且编译libcurl 我以在Linux底下的交叉编译举例。 libcurl源码下载: http://curl.haxx.se/download.html 配置libcurl支持https和zlib压缩
Python调用采用Boost Python封装的c++
上次我写了利用Python提供的API封装c函数,并调用。但是由于利用API的方式过于原始,对于类或者结构极度麻烦。因此,我选择了Boost的Python的来封装类,类似的工具还有SWIG等,选择Boost的原因是它不需要引入其他的接口描述语言,封装也是c++代码;另外,它支持的c++特性比较全。     Boost Python的文档,我推荐:http://www.maycode.com/
vector中存放自定义类 ,对类的要求
vector中存放自定义类的前提是: 自定义的类必须有默认构造函数。因为vector会调用默认构造函数来初始化元素的对象。 那必须要明确:编译器什么时候隐式声明默认构造函数? 有两个条件: · 该类没有显式声明任何构造函数。--既然你都定义了,系统就不给你生成了。 · 数据成员中没有const和reference。--因为要初始化。 满足则隐式生成默认构造函数。这里强调“任何”,是指即
vector resize失败导致下标越界
介绍一种resize失败导致vector下标越界的场景,供参考。
C++ vector类的定义和使用举例
一、概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小。 例如: // c语言风格 int myHouse[100] ; // 采用vector vector vecMyHouse
vector的iterator的错误使用
原文如下:(摘自>)7.2.6 The Increment and Decrement Problem of Vector IteratorsThe use of the increment and decrement operators of iterators includes a strange problem. In general, you can increment and decrement temporary iterators. However, for vectors and s
使用libcurl来下载文件
Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6. 首先一个基本原则就是:绝对不应该在线程之间共享同一个libcurl handle(CURL *对象),不管是easy handle还是multi h
使用libcurl的正确姿势
使用libcurl的正确姿势 来源:互联网     时间:2015-8-10 12:45:41 本篇文章主要介绍了"使用libcurl的正确姿势",主要涉及到方面的内容,对于C/C++教程感兴趣的同学可以参考一下: libcurl支持访问http、ftp等各种服务器,下载图片AV什么的不在话下。但其存在多种接口,异步接口也很难以理解,到底什么样的使用姿势才是正确滴?
vector用erase连续删除元素怎么会出错
vector用erase连续删除元素怎么会出错 vector vt;  for (int i = 0; i { vt.push_back(i); } vector::iterator it; for ( it = vt.begin(); it != vt.end(); it++) { vt.erase(it); // 此句代码只能删除第一个元素,删除第二个时会报错,为什
libcurl的使用 ftp篇(easy模式)
下载libcurl: 1、添加头文件      #include 2、初始化libcurl的API函数     方法1:CURL* curl = curl_easy_init()     方法2(推荐):curl_global_init(CURL_GLOBAL_ALL);            CURL* curl = curl_easy_init();           其中第一
java通过jni调用libcurl,curl java
libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证。 PHP自带curl扩展,但java没有curl扩展,这个工程的目的,就是将libcurl进行封装,以jni的方式进行调用
libcurl在vs2013下C++项目中的编译连接
现在我的需求是要把libcurl port入自己的程序里。首先,
C++中Vector类的使用
讲述了C++中的Vector的本质,使用方法等。
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问