cout

C++ Debug:Invalid address specified to RtlValidateHeap

一世执手 提交于 2020-02-02 15:39:39
@Author:CSU张扬 @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com @我的网站: https://www.faker.top Invalid address specified to RtlValidateHeap 1. 问题概述 报错如下: HEAP [ String . exe ] : Invalid address specified to RtlValidateHeap ( 02730000 , 0274 ED98 ) 监视窗口各变量的值: 异常位置发生在 v.push_back(std::move(s2)); ,该语句进入了 free() 函数, 异常最后在函数 free() 的最后。 free() 是我自定义的 String 类的析构函数内容,释放 allocator 分配的内存。 class String { public : // 省略一部分代码。。。 // 正确的代码 String ( String && s ) noexcept : sz ( s . sz ) , p ( s . p ) { s . p = 0 ; s . sz = 0 ; std :: cout << "move constructor" << std :: endl ; } // 错误的代码 // String(String&

模板1

半城伤御伤魂 提交于 2020-02-02 05:12:29
template<typename T> inline T const& max(T const& a,T const& b) max(4, 7);//ok max(4 , 7.1);//error 解决办法: 1. max(static_cast<double>(4), 7.1); 2.max<double>(4, 7.1); #include <iostream> using namespace std; template<typename T> inline T const& max(T const& a, T const& b) { return a > b ? a : b; } int main() { cout << ::max(4, 5) << endl; cout << ::max('a', 'b') << endl;; cout << ::max(4.1, 5.1) << endl;; cout << ::max(4, static_cast<int>(5.1)) << endl;; cout << ::max(static_cast<double>(4), 5.1) << endl;; cout << ::max<double>(4, 5.1) << endl;; cout << ::max<int>(4, 5.1) << endl;; return 0; }

leetcode 67.二进制求和

假装没事ソ 提交于 2020-02-02 02:37:33
67.二进制求和 执行用时 :3 ms, 在所有 Java 提交中击败了60.62%的用户 将每一位数对应并相加,再加上进位(cout),cout只需要将这一位的结果除以2即可 ( 2/2 == 1 , 1/2==0 , 0/2 == 0 ) ,最后将结果mod 2加入到StringBuilder并反转输出 class Solution { public String addBinary ( String a , String b ) { int al = a . length ( ) - 1 ; int bl = b . length ( ) - 1 ; StringBuilder stringBuilder = new StringBuilder ( ) ; int cout = 0 ; int t = 0 ; for ( int i = al , j = bl ; i >= 0 || j >= 0 ; i -- , j -- ) { int l = i >= 0 ? a . charAt ( i ) - '0' : 0 ; int r = j >= 0 ? b . charAt ( j ) - '0' : 0 ; t = l + r + cout ; cout = t / 2 ; stringBuilder . append ( t % 2 ) ; } if ( cout =

C++读取XML,tinyXml的使用

Deadly 提交于 2020-02-02 00:18:55
前言:   最近在开发的过程中,有个需求是对xml进行格式转化,从一种格式转化到另外一种格式.因此,就需要读取xml进行处理.原本打算写成工具在linux下运行,不过后来考虑到和系统结合,最后也就使用了前台js转了.反正都是读取xml,什么技术转不都是一样的么?   不过刚开始还是对要使用的技术做了一定的探究.c++要读取xml有很多种方式.比较又名的有:   rapidXML(这个是网上介绍的,没用过)    Xerces-C++ XML Parser :通常来说,读取XML的方法都是将整个文本进行读取,然后构建成DOM Tree,之后进行遍历等操作.这个Parser除了支持构建DOM Tree的方式之外,还支持类似于回调函数的方式进行处理(SAX,SAX2).在读到相应的节点然后调用函数进行处理.DOM Tree的方式好处是简单,操作很方便,但是劣势也是很明显:需要把整个XML读进之后才能做处理.如果XML很大,那内存就支撑不住了.SAX,SAX2的作用就在此.其可以支持很大的XML,因为其是相当于事件式的处理方式,不需要构建DOM Tree.不过就是比较麻烦.   TinyXML: 这个就是接下来要介绍的库了.取名Tiny,意在编写一个轻量级的处理基本XML的工具.因此,其支持的特性有限.下面列出了其不支持的功能:    TinyXML doesn't parse or

面向对象程序设计寒假作业2

余生长醉 提交于 2020-02-01 23:59:07
作业描述 详情 这个作业属于哪个课程 2020年面向对象程序设计 这个作业要求在哪 面向对象程序设计寒假作业2 这个作业目标 1. 使用git,建立github仓库 2.优化架构 3.优化命名规范 4.制作编译脚本 5.进行单元测试 6.添加功能 作业正文 博客地址 其他参考文献 Python基础之os.system函数 C++ main()函数及其参数 C++中头文件(.h)和源文件(.cpp)的编写 代码命名 Git忽略提交 git教程 实践题 新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。 请使用.gitignore文件忽略不要上传的文件。用法自行百度。 根据廖老师的教程进行安装git 在github上创建仓库fzu_oop_work 在本地创建代码仓库 创建子目录1,2,分别上传上次和本次的作业 git add . 提交该目录下的所以文件到暂存区,在git commit -m “” 编写.gitignore并提交 关联远程库 git push推送到远程 编程题 继续完成作业一的编程题。 优化架构,一般要求每个函数长度不超过15行。 优化规范,尤其是命名规范。 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。

cout的注意点

蹲街弑〆低调 提交于 2020-02-01 19:19:38
最近遇到几个cout的坑,虽然都是小问题,好记性不如烂笔头 输出char数组 当输出char数组时,只需要给cout一个地址,cout从这个地址开始出书,直至遇到空白符(空格,缩进,换行)。 直接看代码 # include <iostream> using namespace std ; int main ( ) { char str [ 6 ] = "hello" ; cout << str << endl ; return 0 ; } 输出正确!如果我们把char数组的个数6换成5会怎么样呢? 这样编译无法通过,系统会认为str空间至少为6;因为直接把一个字符串复制给char数组时,会自动在最后面留出一个空位置,这样cout就能截止。 我们强制把char数组最后一个位置的空字符替换掉。 # include <iostream> using namespace std ; int main ( ) { char str [ 6 ] = "hello" ; str [ 5 ] = '!' ; cout << str << endl ; return 0 ; } 这里就出现了乱码,因为char数组后面的内存并不是空的,所以cout会一直输出,直到遇到空字符为止。 这种情况在一些处理字符串的过程中,如使用算法copy()进行字符串的内容复制时可能会出现,一定要保证复制完后

linux下编译支持opencl的opencv for android

末鹿安然 提交于 2020-02-01 11:36:13
主要的步骤其他人已经写过,请参考这篇: https://www.cnblogs.com/hrlnw/p/4720977.html 操作的细节请参考附件的pdf: https://files.cnblogs.com/files/ahfuzhang/opencvwithopencl4androidndk-141129030940-conversion-gate02.pdf.zip 用于测试的代码如下: //jpg2gary.cpp #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> #include <opencv2/core.hpp> #include <opencv2/opencv.hpp> #include <opencv2/core/ocl.hpp> #include <fstream> #ifndef P #define P(format, ...) \ do { \ printf("%s %s %d " format "\n", __FILE__, __FUNCTION__, __LINE__, \ ##__VA_ARGS__); \ fflush(stdout); \ } while (0); #endif void

c++学习笔记(一)

只谈情不闲聊 提交于 2020-02-01 00:09:42
前言 现代C++语言可以看做是三部分组成的: · 低级语言。 · 现代高级语言特性,允许我们定义自己的类型以及组织大规模程序和系统。 · 标准库,它利用高级特性来提供有用的数据结构和算法。 2011年,C++标准委员会发布了ISO C++标准的一个重要修订版。此修订版是C++进化过程中的最新一步,延续了前几个版本对编程效率的强调。新标准的主要目标是: · 使语言更为统一,更易于教学。 · 是标准库更简单、安全、使用更高效。 · 使编写高效率的抽象和库变得更简单。 第一章 开始 1.1 编写一个简单的C++程序 重要概念:类型 类型是程序设计最基本的概念之一,一种类型不仅定义了数据类型元素的内容,还定义了这类数据上可以进行的运算。 从命令行运行编译器 1.2 初识输入输出 书中很多事例都使用了 iostream 库。iostream库包含两个基础类型 istream 和 ostream ,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。 标准输入输出对象 标准库定义了4个IO对象。为了处理输入,我们使用一个名为 cin 的istream类型的对象。这个对象也被称为 标准输入 。 cin与 输入运算符 (>>)结合使用,>>在一个语句中可以多次使用,例如:cin >> v1 >> v2。 对于输出,我们使用一个名为 cout 的ostream类型的对象

C++11 智能指针

社会主义新天地 提交于 2020-01-31 23:14:43
【1】C++11智能指针 应用示例如下: 1 #include <iostream> 2 #include <memory> 3 using namespace std; 4 5 void test_unique_ptr() 6 { 7 unique_ptr<int> up1(new int(2020)); // 无法复制的unique_ptr 8 // unique_ptr<int> up2 = up1; // 不能通过编译 9 cout << (*up1) << endl; // 2020 10 unique_ptr<int> up3 = move(up1); // 现在up3是数据唯一的unique_ptr智能指针 11 cout << (*up3) << endl; // 2020 12 // cout << (*up1) << endl; // 运行时错误 13 up3.reset(); // 显式释放内存 14 up1.reset(); // 不会导致运行时错误 15 // cout << (*up3) << endl; // 运行时错误 16 } 17 18 void test_shared_ptr() 19 { 20 shared_ptr<int> sp1(new int(131)); 21 shared_ptr<int> sp2 = sp1; 22 cout <<

标准库类型string

拜拜、爱过 提交于 2020-01-31 13:06:14
定义和初始化string对象 初始化string对象方式: string s1;//默认初始化,s1是一个字符串 string s2(s1);//s2是s1的副本 string s2 = s1;//等价于s2(s1),s2是s1的副本 string s3("value");//s3是字面值"value"的副本,除了字面值最后的那个空字符外 string s4(n, 'c');//把s4初始化为由连续n个字符串c组成的串 拷贝初始化:使用等号(=)初始化一个变量,编译器把等号右侧的初始值拷贝到新建的对象中去。 直接初始化:不使用等号 当初始值只有一个时,使用直接初始化或拷贝初始化都行。如果初始化要用到的值有多个,一般只能使用直接初始化的方式: string s5 = "hiya";//拷贝初始化 string s6("hiya");//直接初始化 string s7(10, 'c');//直接初始化 用拷贝初始化的方式对于多个值进行初始化,需要显式地创建一个(临时)对象用于拷贝: string s8 = string(10, 'c');//拷贝初始化 这条语句等价于: string temp(10,'c'); string s8 = temp;//将temp拷贝给s8 string对象上的操作 string的操作: os<<s 将s写到输出流os当中,返回os is>>s