VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 637|回复: 5

各位大神,这种情况怎么解决?

[复制链接]
97_avatar_middle
最佳答案
0 
在线会员 发表于 2022-10-24 22:53:52 | 显示全部楼层 |阅读模式
本帖最后由 VC小学生 于 2022-10-25 09:05 编辑

要实现的功能是从键盘输入字母,然后接收后以大写字母的形式在控制台窗口打印显示
代码如下:
  1.         char* p_buf=new char[20];
  2.         gets(p_buf);
  3.         static int idx=0;
  4.         for (;*p_buf!='\0';p_buf++)
  5.         {
  6.                 if (*p_buf>=97 && *p_buf<=122)
  7.                 {
  8.                         *p_buf=*p_buf-32;
  9.                        
  10.                 }
  11.                 idx++;
  12.         }
  13.         p_buf-=idx;
  14.         for (;*p_buf!='\0';p_buf++)
  15.         {
  16.                 cout<<*p_buf<<" ";
  17.         }

  18.         delete[] p_buf;
复制代码

结果是这样:
各位大神,这种情况怎么解决?




上一篇:char类型和wchar_t
下一篇:用MOVEWINDOW改变窗体大小时,怎么才能做到窗体图片不闪动?
97_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-10-25 13:29:42 | 显示全部楼层
本帖最后由 VC小学生 于 2022-10-25 13:31 编辑
  1.         char* p_buf=new char[20];
  2.         gets(p_buf);
  3.         static int idx=0;
  4.         for (;*p_buf!='\0';p_buf++)
  5.         {
  6.                 if (*p_buf>=97 && *p_buf<=122)
  7.                 {
  8.                         *p_buf=*p_buf-32;
  9.                 }
  10.                 idx++;
  11.         }
  12.         p_buf-=idx;
  13.         int len=strlen(p_buf);
  14.         for (;*p_buf!='\0';p_buf++)
  15.         {
  16.                 cout<<*p_buf<<" ";
  17.         }
  18.         p_buf-=len;
  19.         delete[] p_buf;
复制代码

修改成这样就好了,应该是指针指向的问题,虽然问题解决了,但还是不太理解,有谁能解释一下
60_avatar_middle
最佳答案
1 
在线会员 发表于 2022-10-26 12:37:52 | 显示全部楼层
好久没看到这么诡异的代码了p_buf-=idx和p_buf-=len碉堡了,充分践行了无法接手一看就想重构的超难维护代码的可行性。估计假如这个作为大型软件的一部分,真心不敢随意改动,动一下就泄漏或者动一下就报错编译0w0e也不行。
65_avatar_middle
最佳答案
0 
在线会员 发表于 2022-10-26 22:55:47 | 显示全部楼层
数组啊,p_buf[idx].你上面代码我看着好诡异...
76_avatar_middle
最佳答案
0 
在线会员 发表于 2022-10-28 09:23:20 | 显示全部楼层
第一个代码第二次for循环之后指针没有回到原来的位置,使用delete释放指针指针时,指针指向错误。第二个代码for循环之后指针回到了原来的位置。建议不要去动指针,使用p_buf[0]之类的会更好点
94_avatar_middle
最佳答案
0 
在线会员 发表于 2022-11-1 09:58:40 | 显示全部楼层
VC小学生 发表于 2022-10-25 13:29
修改成这样就好了,应该是指针指向的问题,虽然问题解决了,但还是不太理解,有谁能解释一下

因为你第二次打印的时候,已经把指针往后移动了,如果每日有还原到首位地址,那么此时的地址是其他内存地址了,delete的时候就非法释放内存地址了。就跟delete野指针一个道理了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-11-28 11:49

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表