c语言笔记 野指针

野指针的两种情况

1.指针初始化的时候什么也不写;
2.指针指向的堆空间被释放;

复制代码
char *p = malloc(20);
free(p); 
p=null;

这句话的意思是指针p指向malloc向系统申请的一块堆空间,然后这块空间现在被free释放掉了,但是指针p此时依旧是指向这块地址,由于该内存空间已经被系统回收了,此时我们指针p就是指向了一块非法的区域,变成野指针。
野指针的情况就是 指针指向一块非法区域,系统内有很多内存没有定义,那么不初始化指针,指针就会乱指导致了非法访问, 可能会破坏系统的关键数据,导致系统崩溃等严重后果,常见的是段错误。

复制代码
int *p; //野指针
char *p = malloc(20);
free(p); //此时指针p变成野指针


上面代码的理解,强制类型转换是临时改变变量的值,实际是不影响变量原先的样子。
a+2 = 102 就是变量a的值加上数值2 等于102;
(int *)a +2 = 108. 这个怎么解释呢?
把整型变量a强转为指针。此时变量a表示的100数值,变成了一个地址,100就变成了房间号,而一个房间号是4个字节,这个多少个字节是由类型决定的,inx型就是占四个字节。
+2 变成了偏移两个单位(一个单位是一个int型),100+8 =108;

常量与变量的区别

一、常量是否有地址

  1. 在某些编程语言中,常量有地址
    #define宏定义的除外),编译器会给它分配存储空间,因此它有地址。例如:
    const int MAX = 100;
    这里的
    MAX是一个具有静态存储期的常量,在内存中有对应的地址。

    void func()
    {
    const int LOCAL_MAX = 50;
    // LOCAL_MAX 在栈上分配空间,有地址
    }

  2. 在某些情况下,常量没有地址

    #define PI 3.14159

在代码中使用PI时,它会被直接替换为3.14159,没有对应的内存地址。
二、变量赋值是否是对常量的拷贝?

  1. 变量赋值的含义
    int a = 10; // 10 是一个常量,这里将 10 的值赋给变量 a int b = a; // 将变量 a 的值赋给变量 b
  2. 更准确的说法
    总结来说,这两句话在某些特定的语境下有一定的正确性,但并不完全准确。常量在某些情况下有地址,而在某些情况下没有地址;变量赋值并不总是对常量的拷贝。
相关推荐
王五周八1 分钟前
Tesseract OCR的Java使用(附安装包,非常详细)
java·开发语言·ocr
一直奔跑在路上2 分钟前
深入浅出RDMA:原理、应用与实战指南
开发语言·php
佛系豪豪吖6 分钟前
AtomCode 部署流程与使用经验
笔记·chatgpt·github·ai编程·gitcode
j7~11 分钟前
【C++】STL--string类--拆析解剖string类的实现以及string类的底层详解(2)
开发语言·c++·浅拷贝·深拷贝·string类的实现·string拷贝构造·string赋值重载
程序员二叉20 分钟前
【JUC】AQS底层深度拆解|独占/共享模式|队列原理全详解
java·开发语言·面试·juc
踏着七彩祥云的小丑22 分钟前
Go 学习第6天:结构体 + 切片 + range遍历
开发语言·学习·golang·go
读书札记202225 分钟前
Qt中windeployqt.exe工具的使用:解决使用CMake创建的项目点击exe文件后系统提示0xc000007b的问题
开发语言·qt
xiaoshuaishuai837 分钟前
C# 定制化Markdown编辑器
开发语言·c#·编辑器
DogDaoDao37 分钟前
C++核心技术深度剖析:从底层原理到工程实践
开发语言·c++·面试·程序员·指针·虚函数
磊 子41 分钟前
C++移动语义和智能指针
java·开发语言·c++