摘要: 内存泄露(臭名昭著的BUG) 动态申请堆空间,用完后不归还 C++语言中没有垃圾回收机制 指针无法控制所指堆空间的生命周期 我们需要什么? 需要一个特殊的指针 指针生命周期结束时主动释放堆空间 一片堆空间最多只能由一个指针标识 杜绝指针运算和指针比较(可以避免野指针) 解决方法 指针操作符(->和* 阅读全文
posted @ 2020-01-26 21:04 认真做个普通人 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 最近在做项目要用到FATFS文件系统和SD卡驱动,SD卡驱动我用的是SPI的通信方式,在挂载文件系统是总是挂载失败了,经过检查,才发现SPI在接收时候卡死: 为了寻找问题的原因,整个人都快疯了,最终我发现一个函数有一个大坑!! 由于我需要在读取或写入SD数据时要把SPI的波特率调大些,就写了下面这个 阅读全文
posted @ 2020-01-17 15:08 认真做个普通人 阅读(2719) 评论(0) 推荐(0) 编辑
摘要: STM32进行动态内存分配是需要注意动态内存分配大小不要超过.S文件中设置Heap Size大小 如图所示: 0x4000 :可以分配得最大字节是16384bytes 这个地方malloc的大小超过了16384,所以程序在运行时会分配失败,产生硬件异常。 如有不对的地方,请指出,万分感谢。 以下摘自 阅读全文
posted @ 2020-01-13 11:25 认真做个普通人 阅读(4107) 评论(0) 推荐(0) 编辑
摘要: 从程序设计的角度,对象只是变量,因此: 在栈上创建对象时,成员变量初始值为随机值 在堆上创建对象时,成员对象初始值为随机值 在静态存储区创建对象时,成员变量初始为0值 一般而言,对象都需要一个确定的初始状态 解决方案:在类中提供一个public的initialize函数,对象创建后立即调用initi 阅读全文
posted @ 2020-01-13 00:04 认真做个普通人 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 关于构造函数 类的构造模式用于对象的初始化 构造模式与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题 如何判断构造函数的执行结果? 在构造函数中执行return语句会发生什么? 构造函数执行结果意味着对象构造成功? 1 #include <stdio.h> 2 class Test 3 阅读全文
posted @ 2020-01-10 20:08 认真做个普通人 阅读(299) 评论(0) 推荐(0) 编辑
摘要: C++中的动态内存分配 C++中通过new关键字进行动态内存分配 C++中的动态内存申请是基于类型进行的 delet关键字用于内存释放 1 1 //变量申请 2 2 Type*pointer = new Type; 3 3 //.... 4 4 delete pointer; 5 5 6 6 //数 阅读全文
posted @ 2020-01-10 19:54 认真做个普通人 阅读(808) 评论(0) 推荐(0) 编辑
摘要: 函数参数扩展 C++中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 函数默认参数的规则 参数的默认值必须从右向左提供 函数调用时使用了默认值,则后续参数必须使用默认值 #include "stdio.h" int mull(int x = 2); int add( 阅读全文
posted @ 2020-01-10 19:47 认真做个普通人 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 函数从意义上应该是一个独立的功能模块 函数名要在一定程度上反映函数的功能 函数参数名要能够体现参数的意义 尽量避免在函数中使用全局变量 当函数参数不应该在函数体内部被修改时,应该加上const声明 如果参数是指针,且仅当做输入参数时,则应该加上const声明 void str_copy(char*s 阅读全文
posted @ 2020-01-10 19:41 认真做个普通人 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 当字符串中有双引号时,需要使用“\”进行转义。 字符串中有“\”,需要使用“\\” 例如:const char* ip = "ifconfig | grep \"inet\" | grep -v 127.0.0.1 | awk '{print $2}'|grep '\\.'"; 阅读全文
posted @ 2020-01-10 19:34 认真做个普通人 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 1. const只读变量 const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间(可以通过指针修改) const修饰的全局变量在全局数据区分配空间(指针也修改不了) const只在编译期有用,在运行期无用 const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在 阅读全文
posted @ 2020-01-10 19:31 认真做个普通人 阅读(221) 评论(0) 推荐(0) 编辑