如何设计一个高效的本地门户网站以查询建筑企业资质?
摘要:如何做本地门户网站,建筑企业资质查询系统,wordpress媒体库增加分类,php做教育网站目录 1 野指针 1.1 成因 1.2 如何规避野指针 2 assert 断言 2.1 用法 2.2 assert 的优点 2.1 assert 的
如何做本地门户网站,建筑企业资质查询系统,wordpress媒体库增加分类,php做教育网站目录
1 野指针
1.1 成因
1.2 如何规避野指针
2 assert 断言
2.1 用法
2.2 assert 的优点
2.1 assert 的缺点
3 小注解
3.1 Debug 和 Release 1 野指针
【概念】#xff1a; 野指针就是指针指向的位置是不可知的#xff08;随机的、不正确的、没有明确限制的#…目录
1 野指针
1.1 成因
1.2 如何规避野指针
2 assert 断言
2.1 用法
2.2 assert 的优点
2.1 assert 的缺点
3 小注解
3.1 Debug 和 Release 1 野指针
【概念】 野指针就是指针指向的位置是不可知的随机的、不正确的、没有明确限制的 1.1 成因
1指针未初始化
2指针越界访问
//VS2022x64
#includestdio.h
int main()
{int arr[5] { 1,2,3,4,5 }; //arr[0]~arr[4]int* p arr;for (int i 0; i 5; i) //当i5时*(p i) 表示 arr[5],越界{printf(%d , *(p i)); //输出结果 1 2 3 4 5 -858993460}return 0;
}
3指针指向的空间被释放
#include stdio.h
int* test()
{int n 100; //n为局部变量当函数调用结束//n的空间也会被销毁return n;
}
int main()
{int* p test();printf(%d\n, *p); //在VS上可以运行但是会报警告return 0;
} 1.2 如何规避野指针
1如果明确知道指针指向哪里就直接赋值地址如果不知道指针应该指向哪里可以给指针赋值 NULL。
#includestdio.h //使用NULL必须包含这个头文件
int main()
{int* p NULL;return 0;
}
2小心指针越界
3指针变量不再使用时及时置NULL指针使用之前检查有效性
#includestdio.h
int main()
{int arr[5] { 1,2,3,4,5 };int* p arr[0];int i 0;for (i 0; i 5; i){*(p) i; //先解引用再}//此时 *p 表示 arr[5],已经越界p NULL;//下次使⽤的时候判断p不为NULL的时候再使⽤//...p arr[0];//重新让p获得地址if (p ! NULL) //判断{//...}return 0;
}4避免返回局部变量的地址如造成野指针的第3个例子不要返回局部变量的地址。 2 assert 断言
2.1 用法
assert.h 头文件定义了宏 assert() 用于在运行时确保程序符合指定条件如果不符合就报错终止运行。这个宏常常被称为“断言”。
assert(p ! NULL)
assert() 宏接受⼀个表达式作为参数。如果该表达式为真返回值非零 assert() 不会产生任何作用程序继续运行。如果该表达式为假返回值为零 assert() 就会报错在标准错误流 stderr 中写入一条错误信息显示没有通过的表达式以及包含这个表达式的文件名和行号。
有同学会觉得这不就跟 if 一样吗他的好处非常多请接着往下看 2.2 assert 的优点
assert() 的使用对程序员是非常友好的
使用 assert() 有几个好处
能自动标识 文件 和 出问题的行号无需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问题不需要再做断言就在 #include 语句的前面定义⼀个宏 NDEBUG 。 然后重新编译程序编译器就会禁用文件中所有的 assert() 语句。如果程序又出现问题可以移除这条 #define NDEBUG 指令或者把它注释掉再次编译这样就重新启用了 assert() 语句。
#define NDEBUG
#include assert.h 2.1 assert 的缺点
assert() 的缺点是因为引入了额外的检查增加了程序的运行时间。
⼀般我们可以在 Debug 中使用在 Release 版本中选择禁用 assert 就行在 VS 这样的集成开 发环境中在 Release 版本中直接就是优化掉了。这样在debug版本写有利于程序员排查问题 在 Release 版本不影响用户使用时程序的效率。
