- 博客(10)
- 资源 (1)
- 收藏
- 关注
原创 Clang 10.0 手写静态分析器Checker
手写静态分析器Checker1.简介2.编写Checker3.配置CMakeLists4.配置Checkers.td5.编译构建6.测试 1.简介 目前网上找到的一些构建Checker的方法都比较古老,随着版本更新一些库文件和依赖文件的变动老方法不太适用,所以整理了一下在10.0版本下构建Checker的方法,10.0之前没没有使用过,后面的版本应该大差不差了。 2.编写Checker 编写自定义的Checker需要在以下目录进行: llvm/tools/clang/lib/StaticAnalyzer/C
2022-05-25 10:14:27
2138
原创 LLVM IR:从中间文件提取struct信息
LLVM IR:从中间文件提取struct信息 先放上源代码: struct demo1 { long long A; long long B; }; struct demo2 { long long C; long long D; float E; }; int main(){ struct demo1 d1; struct demo2 d2; d1.A = 1; d2.C = 2; d2.D = d1.A + d2.C; return 0;
2021-07-15 19:48:53
1745
原创 LLVM IR学习记录(1) GetElementPtr指令
GetElementPtr指令是一条指针计算语句,本身并不进行任何数据的访问或修改,只进行指针的计算。使用语法如下: <result> = getelementptr <ty>, <ty>* <ptrval>{, [inrange] <ty> <idx>}* <result> = getelementptr inbounds <ty>, <ty>* <ptrval>{, [inra.
2021-07-12 17:03:34
7771
原创 《30天自制操作系统》---第一天
《30天自制操作系统》---第一天 二进制编译与文本编译器大家用自己顺手的就可以,今天通过两种方法运行虚拟机,第一种通过作者提供的工具运行在QEMU中,第二种方法运行到VMWare中,直接上效果图。(将"hello,world"换成了"Welcom to FlashingOS!") QEMU效果图 VMWare效果图 ...
2020-10-22 11:25:09
1179
原创 递增单链表去重
递增单链表去重 //递增单链表去除重复元素 //算法思想:采用尾插法,将原来的单链表置为是有第一个结点的链表, //然后遍历剩下的节点,与新链表的尾结点比较, //如果相同则删除当前结点,如果不同则插入 void Del_Sam(LinkList &L){ LNode *r = L->next,//r是新链表的尾指针 *p = r->next,//工作指针 *q; while(p != NULL){ //如果与尾
2020-09-20 20:13:21
318
原创 将一个单链表按照奇偶位置分成两个单链表(其中一个将原来位置逆序)
//C={a1,b1,a2,b2,...,an,bn},带头结点,就地拆分成两个线性表, //使得A={a1,a2,...,an} B={bn,...,b2,b1} //还是通过奇偶位置判断,A采用尾插法,B采用头插法 LinkList Depart_AB(LinkList &A){ int count = 1;//计数器 //创建B链表 LinkList B = (LinkList)malloc(sizeof(LNode)); B->next = NULL;.
2020-09-20 15:12:42
2223
2
原创 将一个单链表按照奇偶位置分解成两个单链表(空间复杂度最小)
将一个单链表按照奇偶位置分解成两个单链表(空间复杂度最小) 算法思想:函数的参数采用单链表的引用,返回值类型为链表,返回其中一个链表。 创建一个新的头结点,并且将形参传过来的链表置空,开始遍历,设置一个计数器,如果为奇数将节点添加到链表A的尾部,如果为偶数添加到链表B的尾部。具体实现代码如下。 #include<iostream> #include"linklist.h"//自己写的头文件 using namespace std; //将一个带头...
2020-09-18 21:02:09
5438
5
原创 查找两个单链表的公共节点
查找两个单链表的公共节点 算法思路:首先要明白单链表有公共节点的情况是什么,因为单链表中每个节点的next指针是唯一的,所以当存在公共节点的时候,其后面的所有节点也都是相同的,所以这是的链表是一个“Y”,而不是我们惯性思维想到的“X”。根据这个结论可知,如果两个链表存在公共节点的话,它们的尾结点也肯定是相同的。 明白了有公共节点的链表构造之后就好办了,假设两个链表的长度分别是 len1 和 len2 第一种暴力方法:遍历第一个链表的节点,每个节点都再遍历第二个链表的所有节点,...
2020-09-18 16:03:38
5274
1
原创 无序链表删除介于给定两个值之间的元素
无序链表删除介于给定两个值之间的元素 算法思路:三个指针,p:工作指针 pre:p的前驱指针 q:中间变量指针,用于删除节点 //无序链表删除介于给定两个值之间的元素 bool LinkList_DelA2B(LinkList &L,int A,int B){ if(A>B || L == NULL) return false; LNode *pre = L, *p = L->next, *q; while(p...
2020-09-18 15:23:54
316
原创 头插法逆序输出单链表
带头结点单链表逆序输出 算法思想:遍历链表元素,利用头插法建立新的链表,这样新生成的链表就是之前的逆序链表,直接对其进行输出即可。(函数中没有写头结点初始化的信息,读者自行补充) 1.链表节点结构 typedef struct LNode{ int data; struct LNode* next; }LNode,*LinkList; 2.链表逆序 //链表逆序 void RevLinkList(LinkList &L){ LNode *p = L->ne
2020-09-11 22:17:14
1345
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅