- 博客(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
1784
原创 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
1477
原创 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
5798
原创 《30天自制操作系统》---第一天
《30天自制操作系统》---第一天二进制编译与文本编译器大家用自己顺手的就可以,今天通过两种方法运行虚拟机,第一种通过作者提供的工具运行在QEMU中,第二种方法运行到VMWare中,直接上效果图。(将"hello,world"换成了"Welcom to FlashingOS!")QEMU效果图VMWare效果图...
2020-10-22 11:25:09
990
原创 递增单链表去重
递增单链表去重//递增单链表去除重复元素//算法思想:采用尾插法,将原来的单链表置为是有第一个结点的链表,//然后遍历剩下的节点,与新链表的尾结点比较,//如果相同则删除当前结点,如果不同则插入void Del_Sam(LinkList &L){ LNode *r = L->next,//r是新链表的尾指针 *p = r->next,//工作指针 *q; while(p != NULL){ //如果与尾
2020-09-20 20:13:21
224
原创 将一个单链表按照奇偶位置分成两个单链表(其中一个将原来位置逆序)
//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
2035
2
原创 将一个单链表按照奇偶位置分解成两个单链表(空间复杂度最小)
将一个单链表按照奇偶位置分解成两个单链表(空间复杂度最小)算法思想:函数的参数采用单链表的引用,返回值类型为链表,返回其中一个链表。 创建一个新的头结点,并且将形参传过来的链表置空,开始遍历,设置一个计数器,如果为奇数将节点添加到链表A的尾部,如果为偶数添加到链表B的尾部。具体实现代码如下。#include<iostream>#include"linklist.h"//自己写的头文件using namespace std;//将一个带头...
2020-09-18 21:02:09
5100
5
原创 查找两个单链表的公共节点
查找两个单链表的公共节点 算法思路:首先要明白单链表有公共节点的情况是什么,因为单链表中每个节点的next指针是唯一的,所以当存在公共节点的时候,其后面的所有节点也都是相同的,所以这是的链表是一个“Y”,而不是我们惯性思维想到的“X”。根据这个结论可知,如果两个链表存在公共节点的话,它们的尾结点也肯定是相同的。 明白了有公共节点的链表构造之后就好办了,假设两个链表的长度分别是 len1 和 len2 第一种暴力方法:遍历第一个链表的节点,每个节点都再遍历第二个链表的所有节点,...
2020-09-18 16:03:38
4798
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
222
原创 头插法逆序输出单链表
带头结点单链表逆序输出算法思想:遍历链表元素,利用头插法建立新的链表,这样新生成的链表就是之前的逆序链表,直接对其进行输出即可。(函数中没有写头结点初始化的信息,读者自行补充)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
1194
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人