新用户注册 | 会员登录
登录 极速注册
取消
热门标签 | HotTags
当前位置:   开发笔记 > 编程语言 > 正文

碰到野指针了...求救

在自己写的CString类中,包含着一个char*string成员,析构函数如下~CString{if(string!NULL){deletestring;s
在自己写的CString类中,包含着一个char *string成员,析构函数如下
~CString
{
  if(string!=NULL)
{
  delete string;
  string=NULL;
}
}
但是在执行如下代码
CString str1="123";
CString str2;
str2=str1;
后;
str1和str2的string指针都指向了同一块内存,在析构这两个对象时,析构str1,便已经把这块内存delete,并将其指针指向了NULL,可是str2的指针依旧指向这块被释放的内存,成了野指针。
请问有什么办法可以解决这个问题?

19 个解决方案

#1


提供行为良好的拷贝构造函数和operator=

#2


1. CString 赋值的是后自己 new 一块内存出来, 把字符串 strcpy 过来,而不是只改指针的指向.
2. 用引用计数.

#3


str1创建个临时对象赋给str2
所以不是一个地址
你可以调试看看str1和str2的地址会发现是不一样的

#4


不是 str1 和 str2 的地址, 是他们里面的 string 成员的地址.

#5


operator= 应该类似于这样的实现:

CString& CString::operator=(const CString& rhs)
{
   if(this == &rhs)
      return *this;

   if(string)
      delete string;

   string = new char[strlen(rhs.string) + 1];
   strcpy(string, rhs.string, ...);
   return *this;
}

#6


难道不是  delete []string; ?

#7


复制的时候要连string所指向的内容一起复制。也就是说要先new一块地盘,把源中string所指字符串复制进去,再将目的中string指向它。

这样析构就不会有问题了。

如果觉得舍不得内存,那就要更改string所指向的结构了,改起来麻烦些。具体是在string所指位置放上一个结构,其中包含一个真正指向字符串的指针和一个引用计数器。每当一个字符串被复制时,将该计数增量。析构时首先减量,减至0才回收这个结构及其所指字符串。

#8


自己重写赋值操作符和 拷贝构造函数

#9


这貌似是要个拷贝构造的问题

#10


大家都懂啊,lz还是仔细看书吧

#11


引用 8 楼 tufei2963 的回复:
自己重写赋值操作符和 拷贝构造函数

这样就可以了

#12


深拷贝与浅拷贝

#13


深拷贝与浅拷贝的问题,在new一个。。。

#14


如没有特殊要求,何不用指针代替类型?
CString *st2 = &st1; //用引用也一样
对于复杂的结构或类,如果不希望给自己添麻烦,那还是用指针来的安全高效

#15


深拷贝与浅拷贝的问题
解决方法
1.另外new 一块新地址存放string的值 而不仅仅是调用String 的"="运算! 也就是一种深拷贝
CString& CString::operator=(const CString& rhs)
{
  if(this == &rhs)
  return *this;

  if(string)
  delete string;

  string = new char[strlen(rhs.string) + 1];
  strcpy(string, rhs.string, ...);
  return *this;
}


2.搞一个智能指针 控制相同的内存区域!

#16


重写“=”号操作符吧

#17


auto_ptr   share_ptr   或者自己实现引用计数   或者自己实现全拷贝

#18


你重载复制操作符=的时候,为什么不新开辟内存给str1 呢?

#19


引用 1 楼 pengzhixi 的回复:
提供行为良好的拷贝构造函数和operator=

UP UP 

#20


  • 谈谈你对野指针的理解?
  • 野指针与僵尸对象

  • string
  • char
  • const
  • 安全
推荐阅读
  • 安全

    电话号码的字母组合解题思路和代码示例

    电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • list

    SpringBoot uri统一权限管理的实现方法及步骤详解

    SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • replace

    Java String与StringBuffer的区别及其应用场景

    Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • main

    Linux环境变量函数getenv、putenv、setenv和unsetenv详解

    Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • md5

    南邮ctf-web的writeup

    本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • object

    Java序列化对象传给PHP的方法及原理解析

    Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • main

    油田地块的划分和计数方法

    本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • regex

    Python正则表达式学习记录及常用方法

    Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • js

    《数据结构》学习笔记3——串匹配算法性能评估

    《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • main

    Java高并发程序设计学习-线程安全的概念与synchronized

    本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • main

    动态规划算法的基本步骤及最长递增子序列问题详解

    动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • main

    UVALive6575 Odd and Even Zeroes 数位dp+找规律

    本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • byte

    CF:3D City Model(小思维)问题解析和代码实现

    CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • byte

    UIAlertController被解散后如何立即执行代码块

    有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • main

    猜字母游戏

    猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
可爱竹子16
这个家伙很懒,什么也没留下!
Tags | 热门标签
  • hashcode
  • stream
  • lua
  • netty
  • php5
  • select
  • include
  • input
  • post
  • js
  • object
  • main
  • grid
  • go
  • replace
  • blob
  • list
  • python3
  • regex
  • bitmap
  • md5
  • timezone
  • byte
  • import
  • c语言
  • shell
  • cmd
  • metadata
  • schema
  • triggers
RankList | 热门文章
  • 1 ppt文件太大微信无法传送怎么办
  • 2 Keras文本序列_文本向量化(一)(标记做 onehot 编码)
  • 3 2种内核级反用户态调试方法
  • 4 5Python3 基本数据类型
  • 5 Ubuntu下Sublime Text 2的安装
  • 6 i++和++i的面试考点
  • 7 sudoswap 引领的 NFTFi Summer 来了?
  • 8 sh 构建阶段脚本 TODO和FIXME。
  • 9 windows7旗舰版怎么查看同一个局域网的其他电脑IP?
  • 10 选项卡组件和ListView组件结合模拟新浪微博
  • 11 cn.bmob.v3.BmobQuery.addWhereLessThanOrEqualTo()方法的使用及代码示例
  • 12 ONLYOFFICE 开发相关 总结
  • 13 Spring Boot + Spring Data JPA 项目整合开发记录(持续更新)
  • 14 cocoscreator更改图片
  • 15 使用批处理文件(batch file)执行powershell命令文件
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有
     

深圳SEO优化公司大鹏阿里店铺运营公司朔州百度网站优化价格潍坊网站建设多少钱贵阳网站建设公司宜宾网站优化按天扣费报价开封推广网站多少钱海北网站设计模板多少钱德州外贸网站设计哪家好沙井百度标王报价周口营销网站公司济源网站关键词优化哪家好观澜网站优化推广公司百色阿里店铺托管公司昭通外贸网站建设价格衡水网站推广方案推荐罗湖外贸网站制作报价阿里网站优化按天扣费推荐金昌如何制作网站报价百色英文网站建设广安网站推广系统报价河池网页设计推荐广州网站搜索优化公司石岩网站推广系统多少钱丽水百度爱采购公司山南网站优化按天计费报价上饶网站设计模板多少钱泉州网站关键词优化多少钱漳州模板网站建设推荐恩施网络广告推广四平网站建设设计价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化