为什么输入超过四个就会出现乱码,而且输入超过九个就会崩。

qq_34269784 2018-01-10 08:51:44
#include<iostream>
#include<string>
using namespace std;
void main()
{
char *st[5]={"ru33333333","ye","qi","wei","liang"};
char sst[]="";
cin>>sst;cout<<sst<<endl;cout<<st[1]<<endl;
st[0]=sst;
cout<<st[0]<<endl;
}
...全文
676 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
望晓天 2018-01-15
  • 打赏
  • 举报
回复
char sst[]=" "; 双引号中间应该加一个空格,不加,数组空间是0
大风哉 2018-01-13
  • 打赏
  • 举报
回复
引用 12 楼 jianwen0529 的回复:
[quote=引用 10 楼 dafengmi 的回复:] Release 模式下运行也是一样的结果。 “char sst[]="";”;这条语句只申请了一个字节内存吧?
那就比较可能破坏到程序自身的某些内存,但是不影响程序的运行。 越界始终是一个潜在的运行时错误,除非是明确地并且严格掌控内存的情况下并且作者是清楚越界及后果的但是又需要如此的情况。[/quote] 嗯,要时刻警惕内存越界的问题。
NIL_ 2018-01-13
  • 打赏
  • 举报
回复
char *st[5]={"ru33333333","ye","qi","wei","liang"};
sfzhaolv 2018-01-13
  • 打赏
  • 举报
回复
sst是只有1个char长度的数组。所以你无论输入几个字符,cout<<st[0] 这里都会有隐患。 注意,即使输入1个字符,因为没有终结符'/0',也可能出错
幻夢之葉 2018-01-13
  • 打赏
  • 举报
回复
引用 10 楼 dafengmi 的回复:
Release 模式下运行也是一样的结果。 “char sst[]="";”;这条语句只申请了一个字节内存吧?
那就比较可能破坏到程序自身的某些内存,但是不影响程序的运行。 越界始终是一个潜在的运行时错误,除非是明确地并且严格掌控内存的情况下并且作者是清楚越界及后果的但是又需要如此的情况。
大风哉 2018-01-12
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
赵4老师,那楼主的这个问题应该怎么解释呢?
大风哉 2018-01-12
  • 打赏
  • 举报
回复
引用 6 楼 jianwen0529 的回复:
[quote=引用 4 楼 jianwen0529 的回复:] [quote=引用 2 楼 jianwen0529 的回复:] char sst[1024]; //错误原因参考1L所述
用Release[/quote]
引用 3 楼 dafengmi 的回复:
楼主,你的代码我没有修改过,我这里运行出来的结果是正确的。
用release再试一次,不出错不代表没问题,这跟特定环境和时机有关。 Debug下有些内存是编译器为了调试额外申请或者延迟回收的,所以越界到这些地方不崩溃的概率还挺高的[/quote] Release 模式下运行也是一样的结果。 “char sst[]="";”;这条语句只申请了一个字节内存吧?
宁静致远93 2018-01-11
  • 打赏
  • 举报
回复
楼主程序的功能是啥呀,char sst[]="";初始化为什么非要这样诡异。
赵4老师 2018-01-11
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
幻夢之葉 2018-01-11
  • 打赏
  • 举报
回复
引用 4 楼 jianwen0529 的回复:
[quote=引用 2 楼 jianwen0529 的回复:] char sst[1024]; //错误原因参考1L所述
用Release[/quote]
引用 3 楼 dafengmi 的回复:
楼主,你的代码我没有修改过,我这里运行出来的结果是正确的。
用release再试一次,不出错不代表没问题,这跟特定环境和时机有关。 Debug下有些内存是编译器为了调试额外申请或者延迟回收的,所以越界到这些地方不崩溃的概率还挺高的
boot_black 2018-01-11
  • 打赏
  • 举报
回复
sizeof(sst)应该是1,内存肯定是越界了
幻夢之葉 2018-01-11
  • 打赏
  • 举报
回复
引用 2 楼 jianwen0529 的回复:
char sst[1024]; //错误原因参考1L所述
用Release
大风哉 2018-01-11
  • 打赏
  • 举报
回复
楼主,你的代码我没有修改过,我这里运行出来的结果是正确的。
幻夢之葉 2018-01-11
  • 打赏
  • 举报
回复
char sst[1024]; //错误原因参考1L所述
AlbertS 2018-01-11
  • 打赏
  • 举报
回复
没有初始化足够的空间,初始化过程比较诡异!!!
狐狸小十 2018-01-10
  • 打赏
  • 举报
回复
char sst[]=""; 初始化时只为/0留了一个char的空间 越界了

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧