永发信息网

下面这个程序不能正确执行,内存出错,哪位高手帮看下?感激涕零!

答案:3  悬赏:80  手机版
解决时间 2021-08-24 01:40
#include#include#includevoid ReverseWord(char *ori){ int i=0,len=strlen(ori); char *s1,*s2; s1=new char[len+1]; strcpy(s1,ori); s2=s1+len-1; for(i=0;i<len;i++) ori[i]=*s2--; delete []s1; }char *fun(char *ch){ int len=strlen(ch); char *s=new char[len+1]; char *ch1=ch,*s2=s; while(*ch1) { if(*ch1!=' ') { char ori[20]="\0"; char *s1=ori; while(*ch1!=' '&&*ch1) *s1++=*ch1++; ReverseWord(ori); for(int i=0;i<int(strlen(ori));i++) *s2++=ori[i]; *s2++=' '; } else while(*ch1==' '&&*ch1) ch1++; } s2--;*s2='\0'; strcpy(ch,s); // 注意这里 delete []s; return ch;}void main(){ char *ch="C++ is an Object-Oriented Programming Language"; cout<<"原字符串为:"<<ch<<endl; char *nch=fun(ch); ofstream ofile("OutPut.txt",ios::out); cout<<"逆转后字符串为:"<<nch<<endl; while(*nch) ofile<<*nch++; cout<<"输出完成!"<<endl; ofile.close(); }
最佳答案
stqcpy这个函数是危险API,容易出错,最好不用。用C++内置的string类的方法。还有,你为什么编传统C++,不用标准C++?
全部回答

void main() {  char* ch="C++ is an Object-Oriented Programming Language";  cout<<"原字符串为:"<<ch<<endl;  char* nch=fun(ch);

------

这里进入fun函数

函数中

 strcpy(ch,s);//拷贝出错  // 注意这里  delete []s;  return ch; }

//原因.你看看这个ch所指向的是什么?

是char* ch="C++ is an Object-Oriented Programming Language";这个常量区,

你现在要拷贝了修改这个常量区,系统自然不让你修改。

解决方法么就是你复制一份这个数据就可以了

内存指令不能read,这是在电脑使用中经常出现的问题,内存是主板上的存储部件,是CPU直接与之沟通,并用其存放当前正在使用的(即执行中)的数据和命令的重要部件。当你用键盘或鼠标输入某个命令后,CPU就会解释命令并将指令或程式载入到内存中,这样程序才能够被执行。而一旦内存发生问题了,程序就不能被执行,因此就产生了前面我们提到的“该内存不能为read或written”错误的警告。当然,出现了“该内存不能为read或written”的故障也不一定都是内存的问题,电脑中了病毒或木马以及运行的程序本身的Bug也会造成这种现象。很难分清究竟是什么原因造成的,一时半会不好排除,但没关系,按确定、取消,重启,即可。感兴趣的网友可用下述办法试着去解决: 1、打开的程序太多,如果同时打开的文档过多或者运行的程序过多,没有足够的内存运行其他程序,要随时关闭不用的程序和窗口。 2、自动运行的程序太多,关闭一些启动程序, 开始-运行-Msconfig---启动 ,除杀毒软件、输入法外一般的程序都可以关掉。 3、物理内存过小,加大婚理内存;内存和主板没插好或其他硬件不兼容 重插内存或换个插槽 ;双内存不兼容 ,要使用同品牌的内存或只要一条内存 ;劣质内存条或内存条坏了 更换内存条;合理设置虚拟内存。 4、市电电压过大的波动,或者PC机上使用劣质电源,都会给内存带来损害,更换功率大、质量好的电源。 5、PC机箱内充满灰尘,或者PC工作环境相对潮湿,也会造成运行不正常。及时除尘。 6 、CPU、显卡散热问题 ,改善散热 。 7、硬盘有问题 ,扫描修复或更换硬盘 。 8 、驱动问题 重装更新驱动 。 9、非法操作,系统无法执行。 10、 软件损坏 重装软件 ;软件有BUG 打补丁或更新到最新版本 ; 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式 ; 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试 。 11、 系统本身有问题 有时候操作系统本身也会有BUG,要注意安装官方发行的更新程序最好及时补上,必要时重装系统。 12、 病毒问题 杀毒 ;杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试 13、试打开CMD窗口输入如下命令: for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i 回车 for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车 重启0x000000该内存不能为read的解决方法 运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 “0x????????”指令引用的“0x????????”内存。该内存不能为“read”。 “0x????????”指令引用的“0x????????”内存,该内存不能为“written”。 以上的情况相信大家都应该见到过,甚至说一些网友因为不爽于这个经常出现的错误提示而屡次重装系统。相信普通用户应该不会理解那些复杂的十六进制代码。 出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 一:先说说硬件: 一般来说,电脑硬件是很不容易坏的。内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。内存条坏了(二手内存情况居多)、2。使用了有质量问题的内存,3。内存插在主板上的金手指部分灰尘太多。4。使用不同品牌不同容量的内存,从而出现不兼容的情况。5。超频带来的散热问题。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。 二、如果都没有,那就从软件方面排除故障了。 先说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在缓冲区,需要操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“光标”。内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的光标,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
下载了MP4格式的视频到W715上,为何无法打开
适合男生朗读的诗歌,关于生日的诗词有哪些
游戏人生怎么样才能升级?
邵阳县计划生育服务站这个地址在什么地方,我
咸鸭蛋哪里的最好吃,哪里的咸鸭蛋最好?
买一条一个月大的黑贝大约要花多少钱?
地球绕着太阳转是什么,神舟八号升空属于什么
香坊区哈尔滨市香坊区焦点美术社这个地址在什
许嵩《素颜》这首歌是不是说出了很多男生的心
回忆同学的诗歌,回忆同学情的诗 写同学情谊深
电脑不能玩魔兽世界!配置如下!!!
武艺真的回加拿大吗?
普通话考试怎么报名,普通话考试三分钟自由发
家族里的炼丹炉可以炼出3级补天丹吗?
1000块左右的漂亮手机有那些
推荐资讯
谁有广州建筑工程项目经理或总工的联系方式?
天龙八部怎么样赚钱最快
时间旅行可能吗,虫洞是否真是存在?
从西安车辆厂到未央区人才管理中心放档案 怎
意大利壁纸品牌有哪些,比较知名的意大利皮鞋
我的q号被人盗了,如何找回密码
CF建战队要花钱吗?怎么建?
4399弹弹堂男装搭配
有什么办法能够解决烦恼啊?
虞城县商丘奥尔迪卫浴哪位知道具体地址啊
东安县永州正宗芦洪市罗氏东安鸡在哪里啊,我
麻城市黄冈麻城市新澳电脑学校怎么去啊,谁知
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?