当前位置: 首页 > news >正文

家居网站建设哪家好网站设计制作价钱低

家居网站建设哪家好,网站设计制作价钱低,做像58同城样的网站,请解释网站开发的主要流程.目录 1.野指针1.1 野指针成因1.1.1 指针未初始化1.1.2 指针越界访问1.1.3 指针指向的空间释放 1.2 如何规避野指针1.2.1 指针初始化1.2.2 小心指针越界1.2.3 指针变量不再使用时,及时置为NULL,指针使用之前检查1.2.4 避免返回局部变量的地址 2.assert断言…

目录

  • 1.野指针
    • 1.1 野指针成因
      • 1.1.1 指针未初始化
      • 1.1.2 指针越界访问
      • 1.1.3 指针指向的空间释放
    • 1.2 如何规避野指针
      • 1.2.1 指针初始化
      • 1.2.2 小心指针越界
      • 1.2.3 指针变量不再使用时,及时置为NULL,指针使用之前检查
      • 1.2.4 避免返回局部变量的地址
  • 2.assert断言

1.野指针

概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)。

1.1 野指针成因

1.1.1 指针未初始化

对比下面2段代码:

//代码1
#include <stdio.h>int main()
{int a = 10;int* p = &a;*p = 20;return 0;
}
//代码2
#include <stdio.h>int main()
{int* p ;*p = 20;return 0;
}

代码1中指针变量p明确指向了a,进行了初始化。

代码2中指针变量p未进行初始化,p是一个局部变量,一个局部变量不初始化,默认是随机值。此时p就是一个野指针!!

1.1.2 指针越界访问

上代码:

#include <stdio.h>int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr; //p此时不是野指针int sz = sizeof(arr) / sizeof(arr[0]);int i = 0;for (i = 0; i <= sz; i++){printf("%d ", *p);p++;}return 0;
}

画图演示为:
在这里插入图片描述
当p访问至下标为10的时候,越界访问,此时p就是野指针!!

1.1.3 指针指向的空间释放

上代码:

#include <stdio.h>int* test()
{int a = 10;return &a;
}int main()
{int* p = test();printf("%d\n", *p);return 0;
}

画图演示如下:
在这里插入图片描述

按道理来说,p可以通过存放的a的地址来找到a,遗憾的是离开test函数时,a的空间已经还给操作系统了,已经不属于a了,但是a的地址又给p了,当我们对p中的地址进行解引用时,此时p中的地址就是野指针了!!

1.2 如何规避野指针

1.2.1 指针初始化

  1. 明确知道指针应该指向哪里,就初始化一个明确的地址。
  2. 如果现在还不知道该指向哪里,就初始化NULL

注:NULL是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错

例如:

#include <stdio.h>int main()
{int a = 10;int* p1 = &a;//初始化一个明确地址int* p2 = NULL;//初始化为NULLreturn 0;
}

1.2.2 小心指针越界

⼀个程序向内存申请了哪些空间,通过指针也就只能访问哪些空间,不能超出范围访问,超出了就是越界访问。

1.2.3 指针变量不再使用时,及时置为NULL,指针使用之前检查

当指针变量指向⼀块区域的时候,我们可以通过指针访问该区域,后期不再使⽤这个指针访问空间的时候,我们可以把该指针置为NULL。因为约定俗成的⼀个规则就是:只要是NULL指针就不去访问,同时使用指针之前可以判断指针是否为NULL。

我们可以把野指针想象成野狗,野狗放任不管是⾮常危险的,所以我们可以找⼀棵树把野狗拴起来,就相对安全了,给指针变量及时赋值为NULL,其实就类似把野狗栓前来,就是把野指针暂时管理起来。

不过野狗即使拴起来我们也要绕着走,不能去挑逗野狗,有点危险;对于指针也是,在使用之前,我们也要判断是否为NULL,看看是不是被拴起来起来的野狗,如果是不能直使⽤,如果不是我们再去使用

1.2.4 避免返回局部变量的地址

如造成野指针的第三个例子,不要返回局部变量的地址。

2.assert断言

assert.h头文件定义了宏assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止。这个宏常常被称为“断言

assert ( p ! = NULL );

assert()宏接收一个表达式作为参数,如果该表达式为真(返回值非零),assert()不会产生任何作用,程序继续运行。如果表达式为假(返回值为0),assert()就会报错,在stderr 中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。

例如:
在这里插入图片描述

http://www.yayakq.cn/news/317476/

相关文章:

  • 营销型网站建设公司哪里有wordpress换轮播图的
  • 没有公众号建微信网站网站模板代码怎么写
  • 浙江省建设通网站湖南厦门网站优化
  • 简要描述创建商务站点的商务WordPress如何加代码
  • 网站建设 技术团队廊坊学校网站建设
  • 锦溪网站建设小程序开发外包
  • 网页设计与网站架设软件开发报价明细
  • 做好档案整理及网站建设做电脑网站起什么名字
  • php违章网站开发加快政务网站群建设管理
  • 天王手表官方网站网站建设步骤流程详细介绍
  • 男女做特别污污的事情网站网络推广赚钱
  • 教育网站改版方案直播视频在线
  • 做自己的网站要花多少钱中国国音电商平台官网
  • 设计的商城网站建设剪辑师培训班有用吗
  • 好的设计网站网站备案如何查询
  • 优化网站的方法有哪些实木餐桌椅网站建设公司
  • 网站建设代码实例WordPress手机访问乱码
  • 太原网站制作优化seo公司专业做营销网站
  • 网站设计做图工具网址域名查询ip地址
  • 微信怎么做网站无极商城网站建设
  • 淘宝网站是谁做的好处最近的男科医院是哪家医院
  • 建网站多少钱建个网站需要怎么做国内模板建站公司
  • 桥梁建设杂志网站一个公司做两个网站可以吗
  • 郑州网站建设一汉狮网络建设网站的公司兴田德润实力强
  • 网站建设响应技术展馆展示设计公司排名
  • 微网站免费平台泰安集团网站建设多少钱
  • 网站界面 欣赏大屏可视化ui设计
  • 如何做企业网站小程序wordpress无法选择服务器
  • 福州建网站 做网页asp.net网站设计
  • 如何在外管局网站上做a合同网站模板的使用