c++基础

x_hxs 2016-05-28 03:39:44
我申请了5个空间,为什么输入10个数据还依然正确呢???不应该出现内存溢出的问题吗???请大神说说哪些情况会导致我这种事情的发生。。。。
...全文
167 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-05-30
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。 我租了5间房中的一间,为什么我闯入别人的房间还依然没被发现呢???不应该出现被人发现的问题吗???请大神说说哪些情况会导致我这种事情的发生。。。。
Pai3.14 2016-05-29
  • 打赏
  • 举报
回复
C或C++并不会主动检测你的数组是不是越界了。
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
引用 14 楼 paschen 的回复:
[quote=引用 13 楼 x_hxs 的回复:] [quote=引用 11 楼 paschen 的回复:] [quote=引用 10 楼 x_hxs 的回复:] [quote=引用 9 楼 paschen 的回复:] [quote=引用 8 楼 x_hxs 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。[/quote] 上面已经说了,这是不确定行为,就是说可能报错,也可能不错 并不是你越界时就一定会报错,不然也就不存在那些潜在难找的错误了 如果没猜错,你在程序结束前free申请到的内存时会报错[/quote] 那导致它出现这种不确定的行为是为什么呢?代码也很简单,就是想知道为什么会这样,是哪一部分的代码导致它出现这种情况的[/quote] 导致原因就是越界啊。。。 我没明白你到底想知道的是什么 我越界了只是在不属于你的内存地方写了数据 而这样的行为是否立刻导致程序崩溃是不确定的[/quote] 好吧,我的目的是为了在判断它是否已经到达最后一个元素空间,执行我接下来的语句,那我写的 if(*(L.rear)==L.length) { L.rear=L.elem; } 这个语句能在判断它到达最后一个元素空间时,使rear与elem指向同一块空间吗???[/quote] 你可以专门添加记录总大小与当前大小的变量,然后添加前比较是否已经满了[/quote] 知道了,谢谢
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
引用 13 楼 x_hxs 的回复:
[quote=引用 11 楼 paschen 的回复:] [quote=引用 10 楼 x_hxs 的回复:] [quote=引用 9 楼 paschen 的回复:] [quote=引用 8 楼 x_hxs 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。[/quote] 上面已经说了,这是不确定行为,就是说可能报错,也可能不错 并不是你越界时就一定会报错,不然也就不存在那些潜在难找的错误了 如果没猜错,你在程序结束前free申请到的内存时会报错[/quote] 那导致它出现这种不确定的行为是为什么呢?代码也很简单,就是想知道为什么会这样,是哪一部分的代码导致它出现这种情况的[/quote] 导致原因就是越界啊。。。 我没明白你到底想知道的是什么 我越界了只是在不属于你的内存地方写了数据 而这样的行为是否立刻导致程序崩溃是不确定的[/quote] 好吧,我的目的是为了在判断它是否已经到达最后一个元素空间,执行我接下来的语句,那我写的 if(*(L.rear)==L.length) { L.rear=L.elem; } 这个语句能在判断它到达最后一个元素空间时,使rear与elem指向同一块空间吗???[/quote] 你可以专门添加记录总大小与当前大小的变量,然后添加前比较是否已经满了
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
引用 11 楼 paschen 的回复:
[quote=引用 10 楼 x_hxs 的回复:] [quote=引用 9 楼 paschen 的回复:] [quote=引用 8 楼 x_hxs 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。[/quote] 上面已经说了,这是不确定行为,就是说可能报错,也可能不错 并不是你越界时就一定会报错,不然也就不存在那些潜在难找的错误了 如果没猜错,你在程序结束前free申请到的内存时会报错[/quote] 那导致它出现这种不确定的行为是为什么呢?代码也很简单,就是想知道为什么会这样,是哪一部分的代码导致它出现这种情况的[/quote] 导致原因就是越界啊。。。 我没明白你到底想知道的是什么 我越界了只是在不属于你的内存地方写了数据 而这样的行为是否立刻导致程序崩溃是不确定的[/quote] 好吧,我的目的是为了在判断它是否已经到达最后一个元素空间,执行我接下来的语句,那我写的 if(*(L.rear)==L.length) { L.rear=L.elem; } 这个语句能在判断它到达最后一个元素空间时,使rear与elem指向同一块空间吗???
lqbk1 2016-05-28
  • 打赏
  • 举报
回复
闯红灯的那个类比已经说得很明白了,希望楼主能领会......
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
引用 10 楼 x_hxs 的回复:
[quote=引用 9 楼 paschen 的回复:] [quote=引用 8 楼 x_hxs 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。[/quote] 上面已经说了,这是不确定行为,就是说可能报错,也可能不错 并不是你越界时就一定会报错,不然也就不存在那些潜在难找的错误了 如果没猜错,你在程序结束前free申请到的内存时会报错[/quote] 那导致它出现这种不确定的行为是为什么呢?代码也很简单,就是想知道为什么会这样,是哪一部分的代码导致它出现这种情况的[/quote] 导致原因就是越界啊。。。 我没明白你到底想知道的是什么 我越界了只是在不属于你的内存地方写了数据 而这样的行为是否立刻导致程序崩溃是不确定的
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
引用 9 楼 paschen 的回复:
[quote=引用 8 楼 x_hxs 的回复:] [quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。[/quote] 上面已经说了,这是不确定行为,就是说可能报错,也可能不错 并不是你越界时就一定会报错,不然也就不存在那些潜在难找的错误了 如果没猜错,你在程序结束前free申请到的内存时会报错[/quote] 那导致它出现这种不确定的行为是为什么呢?代码也很简单,就是想知道为什么会这样,是哪一部分的代码导致它出现这种情况的
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
引用 8 楼 x_hxs 的回复:
[quote=引用 7 楼 paschen 的回复:] [quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。[/quote] 上面已经说了,这是不确定行为,就是说可能报错,也可能不错 并不是你越界时就一定会报错,不然也就不存在那些潜在难找的错误了 如果没猜错,你在程序结束前free申请到的内存时会报错
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
引用 7 楼 paschen 的回复:
[quote=引用 6 楼 x_hxs 的回复:] [quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患[/quote] 首先我申请了可以存放5个elemtype类型元素的空间,然后一开始用for输入3个,调用输出,输出三个数,接下来我一直调用了插入函数,结果我调用了它5次,这就相当于一共添加了8个元素,结果可以正常调用并且输出那8个元素。。。我也想知道问题是在哪里,应该会报错的啊。
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
引用 6 楼 x_hxs 的回复:
[quote=引用 4 楼 paschen 的回复:] 没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了[/quote] 我不知你是指代码哪里插入了8个元素,如果越界了,行为是不确定的,不确定就是指可能崩溃,也可能没崩溃,但埋下了某种隐患
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
看一下我的代码吧,我只是想让它正常的出现内存出错的问题就好,否则我后面设的条件就用不到了
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
我试过在一个函数中申请5个空间,另一个函数中用for循环可以输入8个数,竟然也正确,难道是malloc的使用吗
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
没出错最多只能代表运气好,因为你已经把其他不属于你的空间覆盖了,如果这些空间有重要内容可能也就被你覆盖了
x_hxs 2016-05-28
  • 打赏
  • 举报
回复
引用 1 楼 codewaggon 的回复:
有代码吗?能贴出来,看看吗?
引用 2 楼 cyfcsd 的回复:
确实是内存溢出了,没有发生错误只是你走运而已,就像你闯了红灯但没有出车祸一样 一般接收用户输入时由于不知道用户会输入什么东西,容易发生内存溢出的情况
void initList(List& L) { L.front=(elemtype*)malloc(5*sizeof(elemtype)); L.elem=L.front; L.rear=L.front; L.length=0; } void CrtList(List& L) { int a; for(int i=0;i<3;i++) { cout<<"Please input :"; cin>>a; *(L.front+(i))=a; L.rear++; } L.length=3; } void outputList(List L) { for(;L.front<L.rear;L.front++) { cout<<*(L.front)<<" "; } } void insertList(List& L) { if(*(L.rear)==L.length) { L.rear=L.elem; } int e; cout<<"请输入要插入的数据:"; cin>>e; *(L.rear)=e; L.rear++; L.length++; } 我觉得不是因为走运,可能有我不知道的地方
flying_music 2016-05-28
  • 打赏
  • 举报
回复
确实是内存溢出了,没有发生错误只是你走运而已,就像你闯了红灯但没有出车祸一样 一般接收用户输入时由于不知道用户会输入什么东西,容易发生内存溢出的情况
codewaggon 2016-05-28
  • 打赏
  • 举报
回复
有代码吗?能贴出来,看看吗?

65,210

社区成员

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

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