c++ 报错日常记录

一、引发了异常: 写入访问权限冲突

在这里插入图片描述
"1\0"是const char类型,上述指针方式只是把result指针的指向强行允许指向该字符串,"1\0"占用的内存的数据类型仍然是const char类型且不允许修改。例如result[1] = ‘1’会报这个错误,写入访问权限冲突!

**改为char result[] = “1\0”;**不会报这个错误,result就是个数组,虽然result本质还是个指针,但是此时’1’ 和’\0’是数组内的元素,可以直接修改!
但这个局部变量作为指针或者引用类型的返回值是不行滴,因为函数一结束,这篇内存就被释放了!

正确做法是:char*result = new char[2];如此以来返回指针就可以!

引用做函数返回值

在这里插入图片描述
1,引用做函数返回值,返回的是局部变量

int x = s1.getStrIndex(target);
int x = s1.getStrIndex(target);//上图发现ecx的值(函数返回的值)此时还没被释放,被赋值到了x的地址。此时确实能够正确拿到返回的值,但是还是别这样,不安全。
在这里插入图片描述

int &x = s1.getStrIndex(target);此时发现x能够成功引用返回值,但是执行一会之后该内存会被释放
在这里插入图片描述
在这里插入图片描述
2,直接返回局部变量,此时接受该返回值的话,不能引用接受:int & x= s1.getStrIndex(target);会报错:非常量引用的初始值必须为左值。

那什么时候引用的初始值可以为右值呢?
1,利用c++11的特性:右值引用:int && x = s1.getStrIndex(target);
2,const+左值引用:const+普通引用:const int & x = s1.getStrIndex(target);
一般考虑用第一种,不仅能节省内存,还可对值进行修改

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值