指针的越界崩溃

谁都会走 提交于 2020-02-24 22:00:19
#include <stdio.h>

void test()
{
    printf("输出了内容\n");
}

int main(void)
{
    test();

    int number = 10;

    // 定义指针的方式: 需要指向的类型 *指针的名称 = 0;
    int* point = 0;        // 这个写法是定义指针并且指向地址 0(空指针)

    // 为指针赋值: [应该]使用对应指针类型的变量地址赋值给指针
    point = &number;

    // 使用指针: 自己的地址&point + 指向的地址 point + 指向的地址上保存的内容 *point
    printf("%p %p %d\n", &point, point, *point);

    char chr = 'a';        // 97 0x61
    point = (int*)&chr;

    // 访问到的数据是字符所占的1字节 + 紧随的后3字节
    printf("*point = %x\n", *point);

    // 修改到的数据是字符所占的1字节 + 紧随的后3字节
    // 产生了越界的修改,会导致程序的崩溃
    *point = 200;
    printf("*point = %x\n", *point);


    return 0;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!