哪位C++高手来帮我看一下

哪位C++高手来帮我看一下

貌似楼上的是错的,你这个问题出现在对指针所指不理解上了。首先windows程序运行后在内存后划分了几个区域。代码区用于存储执行代码数据区用于暂存数据(变量之类)还有各种栈结构代码区的内容对于应用程序来说,这块内存是只读的,不能对其赋值,这在一定程度上防范了用户因写程序逻辑错误导致修改了应用程序的内容,从而导致程序逻辑混乱。再看这句话char *ch="123213123";实际上C编译器将你这里的"12313123"是存储于代码区了,那什么东西在数据区呢?就是ch!(不是*ch,ch是一个char*类变量,*ch,也就是ch所指是char类型变量,两者不一样),这个ch是一个字符型指针,其指向了"12313123"这一段的《代码区》数据,如果将ch所指的内容(代码区的这段内容)依次读取出来是没有问题的,但是您的程序对其所指的内容做了-=‘0’这个写操作,与代码区只读这一条相悖,导致访问冲突,进而程序崩溃。如何解决这问题呢?无论用什么方法,要抓住根源——也就是要使你这个12313123存于数据区内。这里我想到的常规方法有2最简单的方法就是用数组来存储你的12313123,这是个静态的办法,不适合变长度字符串:char ch[]="123213123";用这句替换掉你上面的那句,编译器就会在调用栈(位于数据区)申请一个10字节的空间来存放你的字符串,这样操作就没有问题了。如果需要变长度的话,就得用动态申请内存的方法了char *ch=(char*)malloc(strlen("123213123")+1); //+1为了存放最后的\0strcpy(ch,"12313123",strlen("12313123"));这样也是可以的,该数据存放在堆里,堆也是可以读写的一块内存。当然,用完以后别忘了最后用free(ch)释放掉这块内存,否则,内存泄露就会发生。祝你成功。纯手写,望采纳。