C++
文章平均质量分 60
CoderAndClimber
一个小码农,个人微信公众号:清远的梦呓,欢迎关注
展开
-
_snprintf_s 的正确使用方式
这次遇到的奔溃问题,和从一次奔溃谈谈strncpy_s中有异曲同工之处:程序在执行到某个点后,瞬间干干净净的退出,也没有dmp文件生成。根据环境确定了怀疑点后,在TerminateProcess函数上加断点,然后运行程序,程序在TerminateProcess上中断下来,堆栈如下(简化模型):问题出在_snprintf_s上,奔溃原因是_invalid_parameter_noinfo函数中调用了TerminateProcess函数,看意思是参数有问题。_snprintf_s的有两..原创 2020-09-20 18:01:34 · 9982 阅读 · 1 评论 -
strncpy_s 的正确打开方式
最近遇到了一个奔溃问题,程序在执行到某个点后,瞬间干干净净的退出,也没有dmp文件生成。这个奔溃在指定场景下出现,于是用Windbg执行程序,准备在奔溃点进行分析。想法很好,但是在奔溃点,看不到堆栈信息。于是通过日志及问题出现场景,确定了怀疑点。但是在怀疑点,并没有看出问题。因为,我先入为主的以为,strncpy_s会做边界检测,不会越界访问及复制。根据Windbg给出的诊断信息以及咨询同事,在TerminateProcess函数上加断点,运行程序,程序在TerminateProces..原创 2020-09-20 17:58:57 · 6472 阅读 · 0 评论 -
C++程序员学习Java初感
看了一个多月的 Java 了,涉及的书籍有:《On Java 8》、《深入理解 Java 虚拟机》、《Java 并发编程的艺术》、《Manning Spring in Action 5-th Edition》以及极客时间上的《Java 并发编程实战》、《设计模式之美》两门课程,同时,也正在看《Effective Java》。从当前获取的信息来看,真的是体会到什么叫生态,什么叫 Java 的类库...原创 2020-05-04 17:21:32 · 382 阅读 · 0 评论 -
Linux GDB分析死锁
Linux下通过GDB分析程序死锁问题原创 2019-11-09 20:54:57 · 1147 阅读 · 0 评论 -
Linux下通过valgrind定位程序内存问题
内存泄露、重复释放、异常释放的检测与分析原创 2019-11-09 12:00:52 · 1729 阅读 · 0 评论 -
Windbg调试死锁
死锁的定位方法原创 2019-11-09 09:39:34 · 823 阅读 · 0 评论 -
对C++中访问private变量的思考
问题:如果自己动手写CString类的构造函数,拷贝构造函数,析构函数,赋值运算符等,那么该如何写? 参考代码如下#include <memory>class MyString {private: char *m_data;public: MyString(); MyString(const char* ptr); MyString(const MyStrin原创 2015-10-31 19:39:00 · 1941 阅读 · 0 评论 -
栈上分配内存函数Alloca
对于堆上内存分配函数,大家都比较熟悉。对于C而言,有calloc、malloc、realloc函数;对于C++而言,有new、new[]。之前一直以为alloca函数也是堆上分配内存的函数,因为它和calloc及malloc太像了。并且,在STL源码及其他内存分配器中,都是用Alloc表示堆上内存分配,于是就习惯性的认为alloca函数也是堆上分配内存的函数。今天,问一个同事有没有栈上分配...原创 2019-03-21 18:49:28 · 3028 阅读 · 0 评论 -
GDB常用调试指令
编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main常用命令回车键:重复上一命令(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r(gdb)start:单步执行,运行程序,停在第一执行语句...原创 2019-04-06 10:13:23 · 6709 阅读 · 0 评论 -
Windows下动态库符号命名规则
C的名称修饰规则1. 对于使用C调用协议(__cdecl)的函数,在函数名称前加一下划线,不考虑参数和返回值2. 对于使用快速调用协议(__fastcall)的函数,在函数名称前后各加一@符号,后跟参数的长度,不考虑返回值。例如extern "C" int __fastcall Test(int n)的修饰名称为@Test@43. 对于使用标准调用协议(__stdcall)d的函数,在...原创 2019-05-09 21:31:27 · 983 阅读 · 0 评论 -
CryptAcquireContext返回NTE_BAD_KEY_STATE
我们知道,通过rand函数产生的随机数安全性不高,为了保证随机数的安全性,我们一般会选择一个随机数种子,通过该种子增加破解随机数的难度。C/C++下是如下代码:#include <stdlib.h>#include <time.h>int main(){ srand((unsigned)time(NULL)); printf("%d\n",ran...原创 2019-05-25 14:40:33 · 3469 阅读 · 0 评论 -
C++从控制台连续读取数组:while(std::cin)终止
从控制台输入一个数组,有多难?为什么会有这个问题呢?因为在刷题时,需要测试不同的输入。程序应该能够根据输入进行相应的输出,直至按下输入结束键(Windows下为Ctrl + Z,Linux下为Ctrl + D),程序结束。这里,有两个要求: 能够获取到控制台输入的不定长数组 能够一直进行操作,直至按下输入结束键 这个问题应该是刚接触编程时就应该搞清楚的。鉴于当前的工...原创 2019-06-25 22:01:23 · 3336 阅读 · 0 评论 -
C++两个队列实现栈
队列是先进先出容器,而栈是先进后出容器。原创 2015-10-08 22:47:34 · 815 阅读 · 0 评论 -
C++两个栈实现队列
设置stack1和stack2,所有元素均添加到stack1中。当stack2中不为空时,在stack2中的栈顶的元素是最先进入队列的元素,可以弹出。如果stack2为空,把stack1中的元素逐个弹出并压入stack2,由于先入队列的元素被压到stack的底端,经过弹出和压入之后就处于stack2的顶端了,有可以继续直接弹出。原创 2015-10-08 22:55:05 · 510 阅读 · 0 评论 -
C++ STL std::pair
部分参考:http://blog.csdn.net/mdl13412/article/details/6643400// Filename: stl_pair.h/* * * Copyright (c) 1994 * Hewlett-Packard Company * * Permission to use, copy, modify, distribute and sell this so转载 2015-08-21 10:52:51 · 622 阅读 · 0 评论 -
LeetCode题解-Best Time to Buy and Sell Stock
Best Time to Buy and Sell Stock:Say you have an array for which the i-th element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one an原创 2015-07-11 16:13:50 · 636 阅读 · 0 评论 -
LeetCode题解-Best Time to Buy and Sell Stock II
在Best Time to Buy and Sell Stock 基础上添加了新的条件:You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple tran原创 2015-07-11 16:17:07 · 461 阅读 · 0 评论 -
C++ new 之 placement new、operator new、new operator
C++ new 之 placement new、operator new、new operator原创 2015-08-21 17:05:37 · 572 阅读 · 0 评论 -
C++集合操作之集合差集:std::set_difference
C++集合操作之集合并集:std::set_difference 算法set_difference可以用来求两个集合的差集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_difference要求两个区间必须是有序的(从小到大排列),std::set和std::multiset为有...原创 2015-08-13 12:01:39 · 31687 阅读 · 1 评论 -
C++集合操作之集合对称差集:std::set_symmetric_difference
C++集合操作之集合对称并集:std::set_symmetric_difference 算法std::set_symmetric_difference可以用来求两个集合的对称差集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为std::set_symmetric_differ原创 2015-08-13 16:31:42 · 5438 阅读 · 0 评论 -
C++集合操作之集合并集:std::set_union
C++集合操作之集合并集:std::set_union算法set_union可以用来求两个集合的并集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_union要求两个区间必须是有序的(从小到大排列),std::set和std::multiset为有序序列,而hash_set以及hash_m...原创 2015-08-13 10:54:23 · 16064 阅读 · 0 评论 -
C++集合操作之集合交集:std::set_intersection
C++集合操作之集合交集:std::set_intersection算法set_intersection可以用来求两个集合的交集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash_set以及hash_multiset。为什么呢?因为set_intersection要求两个区间必须是有序的(从小到大排列),std::set和std::multiset为有...原创 2015-08-13 16:17:54 · 28604 阅读 · 0 评论 -
C++判断两个序列的包含关系: std::includes
C++判断两个序列的包含关系:std::includes原创 2015-08-14 09:46:46 · 4560 阅读 · 1 评论 -
C++序列操作之std::partition
C++序列操作之std::partitionstd::partition会将区间[first,last)中的元素重新排列,满足判断条件pred的元素会被放在区间的前段,不满足pred的元素会被放在区间的后段。该算法不能保证元素的初始相对位置,如果需要保证初始相对位置,应该使用stable_partition. partition源代码如下:template<class BidirectionalI原创 2015-08-14 10:34:28 · 14715 阅读 · 0 评论 -
C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance )
C++ 多继承和虚继承的内存布局原文链接:http://www.phpcompiler.org/articles/virtualinheritance.html多重继承(Multiple Inheritance)虚继承(Virtual Inheritance)向下转型(Downcasting)总结(Concluding Remarks)参考(References)多重继承(Multipl翻译 2015-09-05 17:31:30 · 792 阅读 · 0 评论 -
C++之单例模式
C++之单例模式单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。方法一:饿汉模式,即指单例实例在程序运行时被立即执行初始化class原创 2015-09-10 20:26:42 · 462 阅读 · 0 评论 -
LeetCode题解-Best Time to Buy and Sell Stock III
在Best Time to Buy and Sell Stock II基础上增加条件:两次交易的最大收益思路一:将数组分为前后两部分,数组大小为size,记分隔符为i,分别求(0,i)以及(i+1,size-1)的最大收益(很一般的思路,没有过大数据关,主要是有太多重复计算),将收益相加,即为本次的最大值,依次迭代,即可获得最大收益。思路二:分别计算正向收益(见Best Time to原创 2015-07-11 16:22:03 · 443 阅读 · 0 评论