
成长积累(C/C++)
风吹过的时光
别问我是谁,我只是个过客。
展开
-
c++中,当异常遇见构造与析构
c++中,当异常遇见构造与析构,会碰撞出什么样的火花?本来应该说,当构造与析构遇见异常的,但是好像念起来不太顺。就改了下。哈哈。我们知道资源是有限的,申请资源和释放资源是要配对执行的。有申请无释放,就会造成资源泄露。废话不多说,先上代码,如下是一个正常的简单代码。先了解一下,之后再进行改造分析。B类中有一个A类的对象指针。声明下:这个例子中的资源,就是B原创 2017-12-03 19:59:23 · 1530 阅读 · 1 评论 -
为什么localtime()函数返回的指针不需要释放?
为什么localtime()函数返回的指针不需要释放?解释:localtime返回的指针是静态申请的,所以他一直存在与全局存储区,直到程序结束后才释放,所以他可以在函数调用之后继续使用。//大概是这样实现的struct tm *localtime( const time_t *time ){ static struct tm _tm; ... return &_tm;}所以呢,不需要在函数中释放,也不需要在函数外释放原创 2014-04-21 09:36:26 · 8067 阅读 · 1 评论 -
occi批量操作数据库示例
occi批量操作数据库示例#include "DBManager.h"#include #include using namespace std;/*表结构:表名:PEOPLE字段:ID(主键); NAME; BIRTHDAY*/int main(){ try { // 连接数据库 DB原创 2014-02-18 15:58:18 · 2342 阅读 · 0 评论 -
fscanf()函数详解
以前解析有规律的文件的时候要么用正则表达式,要么就是傻傻的自己写程序来解析有规律的文件。今天突然发现c的库函数中有一个现成的可以解析有规律的文件的函数,就是fscanf()函数。哎 以前自己做了这么多无用功,在这里详细解析一下fscanf函数:fscanf()函数(有点像正则表达式):功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。用 法:i转载 2014-01-24 11:03:16 · 2339 阅读 · 0 评论 -
[c/c++] 一个进程有多个线程,用什么方法让主线程不退出更好,占用资源最少,效率最高?
[c/c++] 一个进程有多个线程,用什么方法让主线程不退出更好,要求占用资源最少,效率最高?我所知道的不让主线程退出的方法有: 一,死循环:while(1);/ for(;;);二,pause(); 让主线程暂停等待信号使其退出三,另一种死循环while(1)sleep(100)四,通过信号量,使其通过等待一个不可能的发生的信号来阻塞,使main不退出。 问:还有原创 2013-12-11 16:50:16 · 6692 阅读 · 5 评论 -
ORA-21500,ORA-24550,ORA-01000 ,ORA-06512同时出现,问题定位及解决办法
关于ORA-开关的数据库错误,总是很恼人,而且都很不好解决。但最后发现都有解决办法。今天我的一个进程跑了1个小时后来挂掉了,并且有如下错误信息:ORA-21500: internal error code, arguments: [kghex: not first], [0x000000000], [], [], [], [], [], []ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=128] [si_int=11原创 2013-12-10 11:03:41 · 4500 阅读 · 0 评论 -
无限循环 while(1) 和 for(; ;) 有何区别?哪个更好?
无限循环有两种常用的方法:while(1) 和 for(; ; ) 。两种方法的效果一样,相比之下,哪种更好些?编译后代码对比:1、while( 1 );00401028 mov eax,10040102D test eax,eax0040102F je main+23h (00401033)00401031 jmp main+18h (00401028)2、for(转载 2013-12-10 17:00:24 · 9858 阅读 · 0 评论 -
动态库加载出错,cannot restore segment prot after reloc: Permission denied以及为何编译动态库需要-fPIC
项目中碰到的问题,编译好的so文件,放到其他机器上去加载,报了错误,cannot restore segment prot after reloc: Permission denied。网上查了一下,原因是selinux的问题,selinux的设置太过严格导致的。解决的办法是在root用户下,修改/etc/selinux/config 文件,[cpp] view plain转载 2013-12-10 09:53:15 · 1166 阅读 · 0 评论 -
find ./ -name *.bak | xargs rm -rf
xargs时间久了没用,总是忘了rm -rf 后面的f,于是不成功。不想老是查,所以从网上找了些资料,先存起来。 #find ... -exec rm {} \; #find ... | xargs rm -rf 两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exec选项,这样当文件数量较多的时候,就可能会出现“参数太多”之类的转载 2013-12-08 15:22:04 · 41672 阅读 · 0 评论 -
ORA-24550: signal received:这个问题的原因及解决办法
今天写了个多线程访问数据库的程序,一直运行的好好的,突然就出现了下面的问题:ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_int=0] [si_ptr=(nil)] [si_addr=0x1]Killed我写了两个线程,第一个访问数据库都成功,但当第二个线程执行到数据库操作时,就突然出现了上面这么个玩意。印象中以前也遇到过,但现在忘了解决方法了。想了会,怎么会出现这情况,我又没有改程序,只是加了原创 2013-12-07 18:40:31 · 43303 阅读 · 0 评论 -
error: crosses initialization of
./DBOperator.cpp:87: error: jump to case label./DBOperator.cpp:84: error: crosses initialization of 'std::string str_timebuf'./DBOperator.cpp:81: error: crosses initialization of 'char timebuf原创 2013-12-07 15:10:11 · 18386 阅读 · 3 评论 -
Valgrind的使用方法
转自: Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,还可以分析cache的使用等,灵活轻巧而又强大,能直穿程序错误的心脏,真可谓是程序员的瑞士军刀。 一、Valgrind的主要功能 Va转载 2014-11-20 17:43:38 · 1219 阅读 · 0 评论 -
tcpdump参数解析及使用详解
tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 指定原创 2015-02-03 09:50:11 · 125931 阅读 · 4 评论 -
linux动态库培析
关于c++的反射机制,我一直只懂其皮毛,但并没有了解到它的经髓之处,从网上找相关的资料,他们也只是转载其中一份,而且那并不完全,个人那种反射机制并不聪明。看了下面这篇文章后,就顿悟了。可以结合动态库来实现c++的反射机制,这样显得多高级,是吧?很好的文章,所以分享一下,单从下面的文章可能很难看到它和c++的反射机制有什么关系,之后如果有时间我会再写一篇我自己理解 的c++反射机制的实现。转载 2013-05-11 12:57:22 · 2545 阅读 · 0 评论 -
gcc g++ 将所有警告转换为错误
gcc g++ 将所有警告转换为错误-Werror 把所有警告转换为错误,以在警告发生时中止编译过程eg. g++ var_args.cpp --std=c++11 -Werror 其他错误与告警选项 -Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。 -peda原创 2017-10-28 16:07:48 · 12376 阅读 · 0 评论 -
标准C++中的string类的用法总结
出自:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中转载 2013-08-07 18:58:10 · 890 阅读 · 0 评论 -
再说c++虚析构函数
关于c++类中的虚析构函数。1.所有基类的析构函数,都应该声明为虚析构函数!这也是c++标准所指定的。2.如果设计一个类,可能会被后来的其他类所继承,我们应该将它的析构函数声明为虚析构。否则被继承会出现内存泄漏等意想不到的问题。3.如果我们要去继承另外一个类,首先一点是要保证被继承的类的析构函数已经声明为了虚析构函数!原创 2016-04-26 01:09:44 · 1639 阅读 · 1 评论 -
在c++中尾递归,普通递归,循环的效率对比
在前面的学习,我们知道普通递归和尾递归的区别,而且在有些语言里是极力提倡尾递归的,如erlang,因为编译器会对其进行优化,不会因为递归次数的增加给函数栈带来巨大的开销。但是c++语言中,g++会对其进行优化吗?现在通过实例分析,看看结论会是什么?斐波那契数列: 1,1,2,3,5,......通过c++编程来求斐波那契数列的第N项的值。试用两种方法,一种是普通递归,另一种原创 2016-01-07 15:02:10 · 7012 阅读 · 0 评论 -
C++静态成员注意事项
C++静态成员注意事项在日常的编程过程中,很多朋友对于C++静态成员注意事项不是很清楚,本文将介绍一下C++静态成员注意事项的内容。C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、原创 2013-05-12 14:23:49 · 1244 阅读 · 0 评论 -
再说c++ static
类外static1)修饰全局变量——限制访问范围为文件内部可见2)修饰函数——限制访问范围为文件内部可见3)修饰函数内部局部变量——在函数中,只初始化一次(即使多次调用),并具有记忆功能4)static不可修饰函数参数类内static类的静态变量1) c++ 类的static成员变量必须在类外进行初始化。否则不可用(详见2)。2) 但是当有一个类的静态成员变原创 2016-01-20 16:47:27 · 786 阅读 · 0 评论 -
如何c++去除string字符串首尾的\n,\r,\t,空格?
std::string s;s.erase(s.find_last_not_of(" \n\r\t")+1);给大家推荐一个站点:http://stackoverflow.com/原创 2014-02-25 13:24:55 · 22924 阅读 · 2 评论 -
大小端模式与网络字节序
一、为什么会出现大小端模式?不同的cpu采用的大小端模式不一致。X86是小端模式。而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。二、大小端模式的不同带来的问题是什么?如何解决?如果存在数据网络传输,如果大小端模式不一致,如果不经过转换,必然会导致数据不致,出现错误。解决方法:统一将网络上传输的原创 2015-06-03 11:18:16 · 7855 阅读 · 0 评论 -
C++静态常量探究
c++静态常量详解。c++静态常量应用场景及使用方法。今天想,如果我希望一个类中,具有一些常量,但是不希望常量在各个类的对象中有多份拷贝(占用不必要的内存)。想应该如何定义。需求细化:需求1、常量(可以是各种类型)需求2、在不同类对象间共享(不重复占用不必要的内存)需求3、使用范围:类内共享有以下几种解决方案:原创 2015-05-22 13:18:28 · 4325 阅读 · 1 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.youkuaiyun.com/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2015-05-06 18:13:32 · 689 阅读 · 0 评论 -
c语言中如何将字符串转换成float和double类型
c语言中如何将字符串转换成float和double类型先贴上可编译运行的源代码:file: a.cpp#include #include int main () { char szOrbits[] ="365.24"; char* pEnd; float f1; f1 = strtof (sz原创 2013-12-07 10:02:28 · 26046 阅读 · 0 评论 -
ORA-00911错误及解决方法
ORA-00911 无效字符同样的语句在sql/plus里反复测试都没有问题。但到代码里就出异常。弄了好半天,最后发现:又是一个分号的悲剧。将代码中的sql字符串最后的分号去掉,问题就解决了。原创 2013-12-06 16:40:14 · 7311 阅读 · 1 评论 -
线程基类的实现(二)(本文重头戏在子类)
//我感觉到自己对C++的理解越来越深了,呵呵,废话不多说,好好学习,天天向上。#include using namespace std;#include #include class ThreadBaseClass{private: pthread_t t;public: virtual void run() = 0原创 2012-05-11 18:48:46 · 1213 阅读 · 2 评论 -
typedef的作用与陷阱
整理自网络。1.定义类型(帮原有类型重新命名,是程序代码更易懂)typedef int Size;2.隐藏指针typdef struct Node{ char data; struct Node * next;}Node,*LinkedList;LinkedList就是个指针类型,但是在用它定义数据的时候,你看不出来原创 2013-05-16 15:27:23 · 1102 阅读 · 0 评论 -
core
Linux core 文件介绍1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 2. 开启或关闭core文件的生成用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将转载 2012-11-25 19:37:32 · 810 阅读 · 0 评论 -
GDB 命令参考手册
GDB 命令参考手册转载 2012-10-11 20:43:28 · 922 阅读 · 0 评论 -
linux下如何用c语言调用shell命令
#include int system(const char *string);例:在~/myprogram/目录下有shell脚本test.sh,内容为 #!bin/bash #test.sh echo $HOME 在该目录下新建一个c文件systemtest.c,内容为: #include main()转载 2012-09-17 23:43:42 · 23418 阅读 · 3 评论 -
Shell脚本调试技术
【转载】原文链接 http://blog.chinaunix.net/link.php?url=http://zhu8337797.blog.163.com/blog/static/17061754920114264265638/关于作者:曹羽中,在北京航空航天大学获得计算机软件与理论专业的硕士学位,具有数年的 unix 环境下的 C 语言,Java,数据库以及电信计费软件的开转载 2012-09-17 23:53:00 · 1093 阅读 · 0 评论 -
关于stl map,要注意erase的用法
//今天在写程序的时候意外出现了下面这种情况,搞得我一时之间没有找到原因,很郁闷。#include using namespace std;#include #include int main(){ map ms; ms.insert(make_pair(1,"huzhongsan")); int i=2;原创 2012-05-23 13:56:32 · 3567 阅读 · 0 评论 -
正确使用stl map的erase方法
正确使用stl map的erase方法先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是:map.erase有3个重载:void erase ( iterator position );size_type erase ( const k转载 2012-05-23 12:00:13 · 1205 阅读 · 0 评论 -
读取一行(补充一个小知识点)
cin.getline 此函数是按行读取,其语法为:cin.getline(字符指针,字符个数N,结束符); 功能是:一次读取多个字符(包括空白字符),直到读满N-1个,或者遇到指定的结束符为止(默认的是以'\n'结束)。 例: #include using namespace std; int main() {转载 2012-05-15 16:24:14 · 557 阅读 · 0 评论 -
感谢各位博友
哈哈,我的博客访问量,最近一路飙升,到现在(2012年5月15日14:39:30),访问量已经达到了72次,感谢各位博友。我想不用多久就会突破100了,很期待,在此再次感谢各位的支持。谢谢!原创 2012-05-15 14:36:44 · 1140 阅读 · 0 评论 -
CMake学习笔记
CMake学习笔记现在再看这些东西,发现有很多不完善的地方,我也没有将其改正过来,发现这种记日记的过程对于自己对Cmake的理解有很大的帮助2012年4月24号:代码例子如下描述:1,当前目录有两个子目录 incl和src 。2,其中incl中放的是book.h,而src中放的是book.cpp和main.cpp3,在当前目录下编写CMakeLists.txt文原创 2012-05-10 16:08:10 · 1217 阅读 · 0 评论 -
c++中枚举常量与宏常量的一点区别
#include using namespace std;class A{ enum { APPLE = 111 }; #define PEAR 333public: A() { cout }};int main(){ A a; //cout cout return 0;}原创 2013-05-16 16:44:58 · 1640 阅读 · 0 评论 -
链表的建立与反转(递归反转和非递归反转)
#include using namespace std;struct Node{ int data; Node* next; Node(int d):data(d),next(NULL){};};// 链表的非递归排序Node* Reverse1(Node* head){ Node* pre = NULL; Node* pNode = head;原创 2013-05-19 22:19:44 · 1215 阅读 · 2 评论 -
《三十分钟掌握STL》(stl迭代器高级应用)
注:本文来自一部pdf电子书,我这只是将原文直接copy到这里,给大家分享一下,我看完后感觉收获很大。《三十分钟掌握STL》 译者:kary 电子书制作:冷寒生 contact:karymay@163.net 这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟内觉得转载 2013-05-21 14:59:35 · 1977 阅读 · 0 评论