美文网首页
小心野指针

小心野指针

作者: 胖一一 | 来源:发表于2017-01-07 14:20 被阅读0次

版权声明:本文为作者原创文章,转载时请注明文章来源,否则视为侵权,并按法律程序处理!

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

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

#include

#include

int main()

{

char *source1 = "abc";

char *source2;

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";

char *source2 = 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语言一个很强大的功能...

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • 空指针和野指针

    1、什么是空指针,什么是野指针 2、野指针的危害

  • iOS监控-野指针定位

    iOS监控-野指针定位 iOS监控-野指针定位

  • 野指针空指针万能指针

    野指针空指针万能指针

  • 野指针危害真的很大吗?

    想要知道野指针危害到底有多大,首先需要知道野指针是怎么形成的,以及形成野指针会带来什么本质上的缺点。 当然,野指针...

  • iOS-空指针,野指针,僵尸对象

    浅谈一下空指针,野指针,僵尸对象。 空指针:没有存储任何内存地址的指针,空指针的值是0; 野指针:指针指向的对象已...

  • 野指针

    概念:野指针指指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NU...

  • 野指针

    野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免...

  • 野指针

    野指针是让人非常淡疼的一件事,遇到这种问题,人品好的时候程序正常运行,人品差的时候隔三差五的Crash,还不好找,...

网友评论

      本文标题:小心野指针

      本文链接:https://www.haomeiwen.com/subject/exjfbttx.html