指针是C语言一个很强大的功能。然而所谓成也萧何,败也萧何,用好了指针会使程序大放异彩,用错了指针轻者只是报个错,重者可能整个系统都崩溃了。本篇我们来谈谈指针一种错误的使用方法”野指针“。

野指针一般是指定义时没有给初值的指针变量。来看以下程序:

#include

#include

int main()

{

char source1 = "abc";

charsource2;

printf("source2的值是:%u\n", source2);

strcpy(source2 , source1);

printf("%s",source2);

return 0;

}

这段程序定义了一个指向字符的指针source2,但是没有给它一个初始值。下面的代码就是将字符串”abc“复制到source2中,编译的结果如下:

--------------------Configuration: Test - Win32 Debug--------------------

Compiling...

demo.c

D:\CCode\Test\demo.c(8) : warning C4700: local variable 'source2' used without having been initialized

Linking...

Test.exe - 0 error(s), 1 warning(s)

编译给出一个告警,说source2没有初值就被使用了。你可以无视这个告警,并且运行程序,但是运行的结果可能是灾难性的。

由于source2在定义时没有给初值,程序运行时系统会默认给source2一个值,我们可以将程序中的

strcopy(source2 , source1);

printf("%s",source2);

这两行代码注释掉,然后运行程序,看看source2输出的值是多少。运行结果如下:

source2的值是:3435973836

Press any key to continue

可见source2被系统赋予一个值3435973836,而3435973836是一个内存的地址,至于是哪段内存地址,谁也不知道,可能是操作系统本身所在的内存地址,也可能是一个空的内存地址。如果是操作系统本身所在的内存地址,通过strcopy函数将”abc“复制给了这段内存地址,也就是修改了操作系统本身内存数据,你的计算机可能就崩掉了!所以指针在定义时一定要给一个初值,比如”NULL“。在本程序中,除了给source2赋初值外,还需使用malloc函数分配一块存储空间,使得source2指向这块存储空间。修改的程序如下:

#include

#include

#include

int main()

{

char source1 = "abc";

charsource2 = NULL;

printf("source2的初始值是:%u\n", source2);

source2 = (char *)malloc(100);

printf("source2的分配值是:%u\n", source2);

strcpy(source2 , source1);

printf("%s",source2);

free(source2);

source2 = NULL;

return 0;

}

在定义source2时赋初值NULL,在使用source2时分配一段内存空间,不用source2时释放内存空间,并且重新赋值NULL。

c语言编程中野指针错误,小心C语言野指针相关推荐

  1. 数学在c语言编程中的历史,用计算机C语言编程解古代数学题

    用计算机C语言编程解古代数学题 C语言广泛的应用于基础软件.桌面系统.网络通信.音频视频.游戏娱乐等诸多领域.是世界上使用最广泛的编程语言之一本文由论文联盟http://www.LWlm.cOm收集整 ...

  2. c语言编程中精度eps是什么,c语言eps是什么意思

    在C语言中,eps指的是精度.主要用于浮点数运算中,因为C语言浮点数存储的是近似值. 计算会引起误差,所以一般计算低于某个值,就没有意义了,这个阈值就是eps,也就是精度. eps是在函数程序中事先说 ...

  3. c语言错误stray,C语言20条编程中遇到的错误提示(4页)-原创力文档

    C语言20条编程中遇到的错误提示 代码: 编译器提示错误:error: 'else' without a previous 'if' 错误原因解读:'else'的前面没有匹配的'if' 代码: 编译器 ...

  4. c语言中的错误提示,C语言20条编程中遇到的错误提示.doc

    C语言20条编程中遇到的错误提示 1. 代码: 编译器提示错误:error: else without a previous if 错误原因解读:'else'的前面没有匹配的'if' 2. 代码: 编 ...

  5. c语言中错误executing,C语言编程中常见问题解读.doc

    C语言编程中常见问题解读 为什么vc6打开的文件却不能编译1 为什么一个vc6工程中有两个main函数不能编译成功?我想写两个程序怎么办?2 为什么v6不能编译程序,生成信息说compile和link ...

  6. c语言运行太短怎么毡筒,C语言编程中的常见问题-最新文档.doc

    C语言编程中的常见问题-最新文档.doc 激也浸簧哼贰罪匠智事帛棕错永荤腑亦蛋讳躇睁传耀如雾油瘤十倍骋代敌楼毒伟愿煎蜡斌牺脯莆义贴炳揣烧瑶馅熟旨渍暂躲孟幢漏件哭射酱昏差辱尤可耕宾谍拼渠乱御日癸拳柱络胺 ...

  7. C语言祸根看不见的错误,那些年学指针从入门到入土都是内存问题

    是那样的爱学习 那一刻从入门到入土 丑拒 前言 C 语言程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果,最难受的极大多数时候内存问题看不见,也摸不着.编译正确运行出错,让新手从入门到入土 ...

  8. 《C语言解惑》—— 第一篇 C语言编程中的对与错

    本节书摘来自华章出版社<C语言解惑>一 书中的第1章,第1.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 C语言编程中的对 ...

  9. 关于C语言编程中include的用法

    关于C语言编程中include的用法 1 iostream与iostream.h的区别: #include <iostream.h> // 这个就是1998年标准化以后的标准头文件 #in ...

最新文章

  1. JavsScript与时间相关的函数
  2. 资源泄漏:救援的命令模式
  3. apache gobblin mysql_gobblin简单使用
  4. python的array从0开始吗_为什么数组是从0开始的
  5. tidb使用坑记录TiDB和Mysql的sql差异总结
  6. 什么是卡诺图,如何用卡诺图表示逻辑函数,如何用卡诺图化简逻辑函数
  7. 迪杰斯特拉(Dijkstra)算法
  8. 手把手教你如何巧用Github的Action功能
  9. html 调用es2015模块,给大家分别介绍一下CommonJS和ES2015的import
  10. 国内知名MCU厂商官网整理
  11. H5新标签 figcaption 定义图文并茂的html5新标签-figure、figcaption
  12. 歌剧《猫》的经典唱段《memory》中英文对照
  13. 数据结构(C语言描述)——复数
  14. 剑指Offer对答如流系列 - 构建乘积数组
  15. ModelSim入门FPGA仿真基础教程之一:软件介绍
  16. PS | 文字自适应箱子物体形状, 利用滤镜消失点给纸箱加文字
  17. java 的 exe脱壳_[已解决]求教如何使用java编写加壳程序对PE文件进行加壳
  18. Openbravo 3.0 安装及优缺点简述
  19. Redis数据库(四)哨兵和集群
  20. html5 便签墙,12个爆有趣的室内亲子游戏,在家也能玩出花样!

热门文章

  1. github windows系统监控_超火GitHub项目!一夜获得5000星,竟是微软开源的计算器
  2. Python随机森林预测含水率
  3. [摘录]第11章 造就优势谈判的驱动力
  4. mysql 是否包括字符_mysql判断是否包含某个字符的方法
  5. Office project 2019安装
  6. 阶乘和||C语言(高精度)
  7. Gdevops峰会:深度解读中国十大银行DevOps、CMDB及中台的落地与实践
  8. 信息泄露到底有多严重
  9. springboot项目集成java接口文档生成工具knife4j
  10. 75+精美的网格网站设计欣赏