博客园 - DVwei
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=25823
2016-06-23T05:22:25Z
DVwei
https://www.cnblogs.com/dvwei/
feed.cnblogs.com
https://www.cnblogs.com/dvwei/p/5610432.html
zookeeper_process内存泄露问题 - DVwei
单线程模式下,不能递归调用zookeeper_process函数,否则会造成内存泄露。 下列图是在watcher中调用zookeeper_process时,用valgrind检测到的情况:
2016-06-23T05:22:00Z
2016-06-23T05:22:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】单线程模式下,不能递归调用zookeeper_process函数,否则会造成内存泄露。 下列图是在watcher中调用zookeeper_process时,用valgrind检测到的情况: <a href="https://www.cnblogs.com/dvwei/p/5610432.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3790331.html
手机靓号筛选——正则表达式 - DVwei
AAAA: (1\d{2})\d{4}([\d])\2{3}AAA: (1\d{2})\d{5}([\d])\2{2}ABCD: (1\d{2})\d{4}(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3}\dD...
2014-06-16T01:14:00Z
2014-06-16T01:14:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】AAAA: (1\d{2})\d{4}([\d])\2{3}AAA: (1\d{2})\d{5}([\d])\2{2}ABCD: (1\d{2})\d{4}(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){3}\dD... <a href="https://www.cnblogs.com/dvwei/p/3790331.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3608119.html
ZeroMQ总结 - DVwei
Socket typesThread safety: ZeroMQ的socket是非线程安全的,并且ZeroMQ本身不建议在多个线程中传递同一个Socket,即使保证了线程同步。Socket types: ZeroMQ一共具有12种类型的socket,5种消息模式。请求/应答模式:ZMQ_REQ、ZMQ_REP、ZMQ_DEALER、ZMQ_ROUTER发布/订阅模式:ZMQ_PUB、ZMQ_S...
2014-03-18T08:48:00Z
2014-03-18T08:48:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】Socket typesThread safety: ZeroMQ的socket是非线程安全的,并且ZeroMQ本身不建议在多个线程中传递同一个Socket,即使保证了线程同步。Socket types: ZeroMQ一共具有12种类型的socket,5种消息模式。请求/应答模式:ZMQ_REQ、ZMQ_REP、ZMQ_DEALER、ZMQ_ROUTER发布/订阅模式:ZMQ_PUB、ZMQ_S... <a href="https://www.cnblogs.com/dvwei/p/3608119.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3552149.html
基于Poco的UTF8、UTF16、GBK、Hex之间的转换 - DVwei
/******Encoding.h*******/#include "Poco/UnicodeConverter.h"#include "Poco/Exception.h"#include "Poco/DigestEngine.h"#define MyLib_API Foundation_APIusing namespace Poco;POCO_DECLARE_EXCEPTION(MyLib_API, EncodeException, Exception)class Encoding{public: enum ByteOrderTyp
2014-02-17T01:41:00Z
2014-02-17T01:41:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】/******Encoding.h*******/#include "Poco/UnicodeConverter.h"#include "Poco/Exception.h"#include "Poco/DigestEngine.h"#define MyLib_API Foundation_APIusing namespace Poco;POCO_DECLARE_EXCEPTION(MyLib_API, EncodeException, Exception)class Encoding{public: enum ByteOrderTyp <a href="https://www.cnblogs.com/dvwei/p/3552149.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3543041.html
使用_snscanf_s转换十六进制时引起的内存越界 - DVwei
//将Hex编码转换为指定编码格式的字符串string Encoding::DecodeHexString(const string &strSrc, UINT code_page ){ string::size_type length = strSrc.length() / 2; char *result = new char[length + 1]; ZeroMemory(result, length + 1); const char* str = strSrc.c_str(); for(string::size_type i = 0; i < length;...
2014-02-10T07:51:00Z
2014-02-10T07:51:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】//将Hex编码转换为指定编码格式的字符串string Encoding::DecodeHexString(const string &strSrc, UINT code_page ){ string::size_type length = strSrc.length() / 2; char *result = new char[length + 1]; ZeroMemory(result, length + 1); const char* str = strSrc.c_str(); for(string::size_type i = 0; i < length;... <a href="https://www.cnblogs.com/dvwei/p/3543041.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3427205.html
C++多线程环境下注意共享资源的释放顺序 - DVwei
比如我现在写一个多线程下载程序,包含DownloadTask、HttpDownload两个类。class DownloadTask{ //省略n行代码public: int m_threads;//需创建的线程总数 CCriticalSection m_cs;//临界区 void Stop();};class HttpDownload{ //省略n行代码 HttpDownload(DownloadTask* task): m_task(task) { }public: DownloadTask* m_task; void Start();/...
2013-11-16T13:45:00Z
2013-11-16T13:45:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】比如我现在写一个多线程下载程序,包含DownloadTask、HttpDownload两个类。class DownloadTask{ //省略n行代码public: int m_threads;//需创建的线程总数 CCriticalSection m_cs;//临界区 void Stop();};class HttpDownload{ //省略n行代码 HttpDownload(DownloadTask* task): m_task(task) { }public: DownloadTask* m_task; void Start();/... <a href="https://www.cnblogs.com/dvwei/p/3427205.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3427154.html
解决ERROR_INVALID_USER_BUFFER - DVwei
我用CSocket编写了一个HTTP下载程序,接收数据大概如下://......//use CSocket class//send request...//......int recevieSize(1);while(recevieSize > 0){ ZeroMemory(buff, BUFFSIZE + 1); receviedSize = socket.Receive(buff, BUFFSIZE); if(receivedSize > 0) { //use CFile class downloadFile.Write(buff, re...
2013-11-16T12:57:00Z
2013-11-16T12:57:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】我用CSocket编写了一个HTTP下载程序,接收数据大概如下://......//use CSocket class//send request...//......int recevieSize(1);while(recevieSize > 0){ ZeroMemory(buff, BUFFSIZE + 1); receviedSize = socket.Receive(buff, BUFFSIZE); if(receivedSize > 0) { //use CFile class downloadFile.Write(buff, re... <a href="https://www.cnblogs.com/dvwei/p/3427154.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3395150.html
VC++使用CSocket发送HTTP Request时需要注意发送数据的编码格式 - DVwei
VS2010以及更高版本中新建的MFC项目字符集默认是Unicode,CString创建的字符串默认是Unicode。使用CSocket时,若以CString组织需要发送的HTTP Head时,那么服务器不会接受这种数据,会强制断开连接。HTTP服务器的默认读取方式是基于char type的单字节字符串编码(ANSI-1Byte(8bit)/char(英文字符)),而Unicode是以2Byte(16bit)/char存储的,所以不能以unicode编码来构造HTTP Head.解决方法有两种,第一种:以CStringA class构造HTTP Head;根据MSDN上的解释:“A CStri
2013-10-29T13:04:00Z
2013-10-29T13:04:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】VS2010以及更高版本中新建的MFC项目字符集默认是Unicode,CString创建的字符串默认是Unicode。使用CSocket时,若以CString组织需要发送的HTTP Head时,那么服务器不会接受这种数据,会强制断开连接。HTTP服务器的默认读取方式是基于char type的单字节字符串编码(ANSI-1Byte(8bit)/char(英文字符)),而Unicode是以2Byte(16bit)/char存储的,所以不能以unicode编码来构造HTTP Head.解决方法有两种,第一种:以CStringA class构造HTTP Head;根据MSDN上的解释:“A CStri <a href="https://www.cnblogs.com/dvwei/p/3395150.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3384668.html
C++/CLI中class成员声明与实现分开在不同文件时必须添加namespace - DVwei
以下是我的代码://TaskConfigFile.h#pragma onceusing namespace System::Collections::Generic;using namespace System;using namespace System::IO;using namespace System::Text;ref class TaskConfigFile{public: TaskConfigFile(); TaskConfigFile(String^ str_link, Int64 file_size, short threads_sum); TaskConf...
2013-10-23T09:53:00Z
2013-10-23T09:53:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】以下是我的代码://TaskConfigFile.h#pragma onceusing namespace System::Collections::Generic;using namespace System;using namespace System::IO;using namespace System::Text;ref class TaskConfigFile{public: TaskConfigFile(); TaskConfigFile(String^ str_link, Int64 file_size, short threads_sum); TaskConf... <a href="https://www.cnblogs.com/dvwei/p/3384668.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3372935.html
lseek函数与文件空洞 - DVwei
在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满。虽然这些文件空洞并没有实际的数据,但是它们仍然占据硬盘空间。 在Windows下同样支持这种文件空洞,以下简单的代码产生一个6KB的空洞文件:#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ CFile testFile(_T("D:\\test"), CFile::modeCreate | CFile::mod
2013-10-16T13:14:00Z
2013-10-16T13:14:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满。虽然这些文件空洞并没有实际的数据,但是它们仍然占据硬盘空间。 在Windows下同样支持这种文件空洞,以下简单的代码产生一个6KB的空洞文件:#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ CFile testFile(_T("D:\\test"), CFile::modeCreate | CFile::mod <a href="https://www.cnblogs.com/dvwei/p/3372935.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/p/3139263.html
RAII in C++ - DVwei
在C++中,如果对一个块直接分配资源,而且在释放资源之前发生异常,那么这些资源在栈展开(注1)期间将不会得到释放。例如,一个块可以通过调用new动态分配内存,如果该块因异常退出,编译器将不会删除该指针,已分配的内存也不会得到释放。 比如下面这个函数:void funtion(){ vector<string> str_vec; string s; while(cin >> s) v.push_back(s); string *p = new string[v.size()]; delete [] p;} 这...
2013-06-16T11:45:00Z
2013-06-16T11:45:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】在C++中,如果对一个块直接分配资源,而且在释放资源之前发生异常,那么这些资源在栈展开(注1)期间将不会得到释放。例如,一个块可以通过调用new动态分配内存,如果该块因异常退出,编译器将不会删除该指针,已分配的内存也不会得到释放。 比如下面这个函数:void funtion(){ vector<string> str_vec; string s; while(cin >> s) v.push_back(s); string *p = new string[v.size()]; delete [] p;} 这... <a href="https://www.cnblogs.com/dvwei/p/3139263.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/05/27/3101320.html
ubuntu12.04 移动根分区 - DVwei
原根分区所在:/dev/sda3移动到:/dev/sda2在LiveCD下:先把/dev/sda3所有文件复制到/dev/sda2cp -ax /原根目录 /新根目录修改/boot/grub/grub.cfg和/etc/fstab,把这两个文件里原来的/dev/sda3的uuid全部替换成/dev/sda2的uuid重启即可。如果无法启动,需重新安装grubgurb-install --boot-directory=/mnt/ /dev/sda #/mnt为boot分区挂载目录重启即可
2013-05-27T04:14:00Z
2013-05-27T04:14:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】原根分区所在:/dev/sda3移动到:/dev/sda2在LiveCD下:先把/dev/sda3所有文件复制到/dev/sda2cp -ax /原根目录 /新根目录修改/boot/grub/grub.cfg和/etc/fstab,把这两个文件里原来的/dev/sda3的uuid全部替换成/dev/sda2的uuid重启即可。如果无法启动,需重新安装grubgurb-install --boot-directory=/mnt/ /dev/sda #/mnt为boot分区挂载目录重启即可 <a href="https://www.cnblogs.com/dvwei/archive/2013/05/27/3101320.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/05/20/3087286.html
opencv学习笔记 - DVwei
1.从官网(http://opencv.org/)上下载源码,编译安装,编译通过,未发现错误。2.编写了如下测试程序://showImage.cpp#include "highgui.h"int main( int argc, char **argv ){ IplImage *img = cvLoadImage( argv[1] ); cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); cvShowImage("Example1", img); cvWaitKey(0); cvReleaseI
2013-05-20T02:47:00Z
2013-05-20T02:47:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】1.从官网(http://opencv.org/)上下载源码,编译安装,编译通过,未发现错误。2.编写了如下测试程序://showImage.cpp#include "highgui.h"int main( int argc, char **argv ){ IplImage *img = cvLoadImage( argv[1] ); cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); cvShowImage("Example1", img); cvWaitKey(0); cvReleaseI <a href="https://www.cnblogs.com/dvwei/archive/2013/05/20/3087286.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/05/19/3086994.html
利用aria2搭建远程下载服务器 - DVwei
服务器端安装aria2c:sudo apt-get isntall aria2c配置~/.aria2/aria2.conf#最大同时下载数(任务数), 路由建议值: 3max-concurrent-downloads=10#断点续传continue=true#同服务器连接数max-connection-per-server=5#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要min-split-size=10M#单文件最大线程数, 路由建议值: 5split=10#下载速度限制max-overall-download-limit=0#单文件速度限制max-download
2013-05-19T09:03:00Z
2013-05-19T09:03:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】服务器端安装aria2c:sudo apt-get isntall aria2c配置~/.aria2/aria2.conf#最大同时下载数(任务数), 路由建议值: 3max-concurrent-downloads=10#断点续传continue=true#同服务器连接数max-connection-per-server=5#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要min-split-size=10M#单文件最大线程数, 路由建议值: 5split=10#下载速度限制max-overall-download-limit=0#单文件速度限制max-download <a href="https://www.cnblogs.com/dvwei/archive/2013/05/19/3086994.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/04/18/3029464.html
MySQL Connector/C++(一) - DVwei
英文原文:http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html#trx如果我翻译错了或者翻译的不好,欢迎指正~Developing Database Applications Using MySQL Connector/C++这个教程会教你搭建安装MySQL Connector/C++ driver的要点和步骤,以一个简单的连接MySQL的例子,从MySQL中获取数据并对其进行插入(数据)操作。因为重点在于从C++程序连接数据库,所以本文档假设MySQL已经运行并且能从客户端访问。本文是面向那些初次接触MyS
2013-04-18T13:06:00Z
2013-04-18T13:06:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】英文原文:http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html#trx如果我翻译错了或者翻译的不好,欢迎指正~Developing Database Applications Using MySQL Connector/C++这个教程会教你搭建安装MySQL Connector/C++ driver的要点和步骤,以一个简单的连接MySQL的例子,从MySQL中获取数据并对其进行插入(数据)操作。因为重点在于从C++程序连接数据库,所以本文档假设MySQL已经运行并且能从客户端访问。本文是面向那些初次接触MyS <a href="https://www.cnblogs.com/dvwei/archive/2013/04/18/3029464.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/04/10/3012732.html
交叉编译qt4.8.4 for ARM - DVwei
所需工具: 交叉编译工具:arm-linux-gcc 4.4.3 qt4.8.4源码包:qt-everywhere-opensource-src-4.8.4.tar.gz编译: 解压qt4.8.4源码包:tar -zxvf qt-everywhere-opensource-src-4.8.4.tar.gz 设置交叉编译工具链,修改文件/qt-everywhere-opensource-src-4.8.4/mkspecs/linux-arm-gnueabi-g++ /qmake.conf,修改内容如下: # modifications to g++.confQMAKE_CC ...
2013-04-10T09:25:00Z
2013-04-10T09:25:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】所需工具: 交叉编译工具:arm-linux-gcc 4.4.3 qt4.8.4源码包:qt-everywhere-opensource-src-4.8.4.tar.gz编译: 解压qt4.8.4源码包:tar -zxvf qt-everywhere-opensource-src-4.8.4.tar.gz 设置交叉编译工具链,修改文件/qt-everywhere-opensource-src-4.8.4/mkspecs/linux-arm-gnueabi-g++ /qmake.conf,修改内容如下: # modifications to g++.confQMAKE_CC ... <a href="https://www.cnblogs.com/dvwei/archive/2013/04/10/3012732.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/03/30/2990819.html
7个致命的Linux命令 - DVwei
原文地址:http://linux.cn/thread/10246/1/1/如果你是一个linux新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避免在系统中运行它们。rm -rf /此命令将递归并强制删除 / 目录下的所有文件。char esp[] __attribute__ ((section(”.text”))) /* e.s.prelease */= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″“\xff\xff\xf
2013-03-30T10:57:00Z
2013-03-30T10:57:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】原文地址:http://linux.cn/thread/10246/1/1/如果你是一个linux新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避免在系统中运行它们。rm -rf /此命令将递归并强制删除 / 目录下的所有文件。char esp[] __attribute__ ((section(”.text”))) /* e.s.prelease */= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″“\xff\xff\xf <a href="https://www.cnblogs.com/dvwei/archive/2013/03/30/2990819.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/03/23/2977794.html
翻译:netcat manual - DVwei
因为最近在搭建服务器要用到nc,所以阅读手册的同时也顺便把它翻译了,我的英语不好,如果哪里翻译错了,请指正。NC(1) BSD General Commands Manual NC(1)NAME nc — arbitrary TCP and UDP connections and listensSYNOPSIS nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protoc...
2013-03-23T14:21:00Z
2013-03-23T14:21:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】因为最近在搭建服务器要用到nc,所以阅读手册的同时也顺便把它翻译了,我的英语不好,如果哪里翻译错了,请指正。NC(1) BSD General Commands Manual NC(1)NAME nc — arbitrary TCP and UDP connections and listensSYNOPSIS nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protoc... <a href="https://www.cnblogs.com/dvwei/archive/2013/03/23/2977794.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/03/22/2976249.html
利用nmap扫描整个局域网活动主机的IP-MAC和Port - DVwei
通过nmap扫描完之后,查看arp缓存表即可查看IP-MAC表进行ping扫描,输出所有响应的主机IP:nmap -sP 172.17.148.0/24 Nmap scan report for 172.17.148.19Host is up (0.0029s latency).Nmap scan report for 172.17.148.28Host is up (0.00069s latency).Nmap scan report for 172.17.148.36Host is up (0.0067s latency).Nmap scan report for 172.17.148..
2013-03-22T11:46:00Z
2013-03-22T11:46:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】通过nmap扫描完之后,查看arp缓存表即可查看IP-MAC表进行ping扫描,输出所有响应的主机IP:nmap -sP 172.17.148.0/24 Nmap scan report for 172.17.148.19Host is up (0.0029s latency).Nmap scan report for 172.17.148.28Host is up (0.00069s latency).Nmap scan report for 172.17.148.36Host is up (0.0067s latency).Nmap scan report for 172.17.148.. <a href="https://www.cnblogs.com/dvwei/archive/2013/03/22/2976249.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/dvwei/archive/2013/03/10/2952925.html
读书笔记:C++中利用智能指针和值型类防止内存非法访问 - DVwei
在程序当中,经常会用到一些共享对象。一个具有指针成员的类,如果发生复制行为,一个指针复制到另一个指针时,两个指针就指向同一个对象。此时就可以使用任一指针改变这个共享的对象。那么,如果一个指针删除了这个共享对象,那么另一指针就成了悬垂指针,如果再对此对象进行操作时,就会发生内存访问错误。而C++中无法判断一个指针所指向的内存是否有效,这是非常危险的。 看下面一个例子:class MyClass{ public: MyClass(int *p,int i): ptr(p),value(i) { } ~MyClass() { delete ptr; } ...
2013-03-10T10:18:00Z
2013-03-10T10:18:00Z
DVwei
https://www.cnblogs.com/dvwei/
【摘要】在程序当中,经常会用到一些共享对象。一个具有指针成员的类,如果发生复制行为,一个指针复制到另一个指针时,两个指针就指向同一个对象。此时就可以使用任一指针改变这个共享的对象。那么,如果一个指针删除了这个共享对象,那么另一指针就成了悬垂指针,如果再对此对象进行操作时,就会发生内存访问错误。而C++中无法判断一个指针所指向的内存是否有效,这是非常危险的。 看下面一个例子:class MyClass{ public: MyClass(int *p,int i): ptr(p),value(i) { } ~MyClass() { delete ptr; } ... <a href="https://www.cnblogs.com/dvwei/archive/2013/03/10/2952925.html" target="_blank">阅读全文</a>