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

指针变量未分配空间或者初始化为空指针使用问题

提示:关于指针

文章目录

  • 前言
  • 一、指针的使用
  • 总结


前言

在看c++书籍的时候,看到浅复制和深复制时,说到成员为指针的时候,会出异常。但是其实没有更多的感想,但是联想到上次考试指针没分配空间导致程序异常的情况,所以现在再验证一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、指针的使用

以下是验证代码。

int main()
{//这边是异常的,因为没有给指针分配空间,这个上次考试的时候,也遇到了,不过通过调试发现了改了。当时真是醍醐灌顶,切记。char *p = NULL;char str[] = "hello";memcpy(p, str, strlen(str));printf("%s",p);//这边是异常的,因为没有给指针分配空间int *p2 = NULL;int data = 12;*p2 = data;printf("%d",*p2);//打印12//这个是正常的,跟预想的不一样。int *p3 = NULL;int data3 = 12;p3 = &data3;      //这边p指向了data的数据空间   p也就是被分配了空间printf("第一次打印p3:%d\n",*p3);int dataTest = 22;*p3 = dataTest;printf("第二次打印p3:%d\n",*p3);printf("打印data3:%d\n",data3);       //这里注意data3的值也被改了return 0;
}

感想:其实里面涉及到一个问题,就是空指针不能解引用。

另外空指针可以被另一个指针赋值,即指针指向另一个内存空间。

为了深入了解一下指针的使用百度了一些资料如下

指针与内存
在C++中,一个指针必须在被分配内存之后,才能进行直接赋值的操作,如果没有进行内存的分配,直接对指针进行赋值,是会编译错误的,例如:

int *p=123;   //这样是不可取的

我们平时常用的分配内存方式是分配【栈内存】,例如:

int k=123;
int *p=&k;  *p=345;
cout<<k;

因为123被放入了一个变量k中,系统为变量k分配了内存,指针p指向一个有内存空间的地址之后,就可以直接进行赋值了.

动态分配内存:
在系统中除了分配【栈内存】的方式外,还可以分配【堆内存】,分配方式如下:

int *p=NULL;
p=new int;                         //分配堆内存
*p=123;                            //分配了内存之后,就可以直接进行赋值操作了

关于指针赋值给指针

在C语言中,可以使用指针赋值运算符(=)将一个指针的值赋给另一个指针。指针之间的赋值实际上是将一个指针变量的值(即内存地址)赋给另一个指针变量。例如,假设有两个指针变量ptr1和ptr2,可以通过以下方式将ptr1的值赋给ptr2:```cptr2 = ptr1;```此时,ptr2将指向与ptr1相同的内存地址。需要注意的是,指针之间的赋值只是将内存地址赋给了另一个指针变量,而不是复制指针指向的内容。因此,修改其中一个指针指向的内存中的值也会影响另一个指针。```cint a = 10;int* ptr1 = &a;int* ptr2;ptr2 = ptr1; // 将ptr1的值赋给ptr2*ptr2 = 20; // 修改ptr2指向的内存中的值printf("%d", *ptr1); // 输出20,因为ptr1和ptr2都指向同一块内存```

欢迎补充。


总结

所以,根据以上验证,得出一个结论,就是浅拷贝的主要问题就是导致两个指针指向同一块内存,存在潜在的风险!

http://www.lryc.cn/news/210130.html

相关文章:

  • 力扣第763题 划分字母区间 c++ 哈希 + 双指针 + 小小贪心
  • js 代码中的 “use strict“; 是什么意思 ?
  • 用于读取验证码的 OCR 模型
  • Uniapp 跳转回上一页面并刷新页面数据
  • DeOldify 接口化改造 集成 Flask
  • Vue 3响应式对象: ref和reactive
  • Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器
  • 带有 Vagrant 和 Virtualbox 的 Elasticsearch 集群
  • Cross Site Scripting (XSS)
  • VDA到Excel方案介绍之自定义邮件接收主题
  • 【opencv】【CPU】windows10下opencv4.8.0-cuda C++版本源码编译教程
  • 多分类loss学习记录
  • Linux创建逻辑卷并扩容(超详细)
  • buuctf_练[安洵杯 2019]easy_web
  • 入学生活科研随笔
  • 【1++的Linux】之进程间通信(共享内存)
  • Linux高性能服务器编程——ch8笔记
  • Android WMS——ViewRootImpl分析(六)
  • Unsatisfied dependency expressed through bean property ‘sqlSessionTemplate‘;
  • 【C++】智能指针:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)(待更新)
  • nodejs+vue全国公考岗位及报考人数分析
  • 【0基础学Java第二课】数据类型与变量
  • Pytorch整体工作流程代码详解(新手入门)
  • 读图数据库实战笔记02_图数据建模
  • 竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
  • 对Happens-Before的理解
  • 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测
  • Java面试八股文之暑假合集
  • 竞赛选题 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
  • 机器学习第一周