设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
简单的数组问题 ???
1
2
3
/ 3 页
下一页
返回列表
查看:
1498
|
回复:
20
简单的数组问题 ???
[复制链接]
shell
shell
当前离线
积分
533
IP卡
狗仔卡
发表于 2004-8-8 16:34:04
|
显示全部楼层
|
阅读模式
main(void)
{
int i,sum=0,a[10]; \\这里是a[10]
for (i=0;i<=15;i++) \\改成for (i=0;i<=14;i++)就可以正常输出
{
a[i]=i;
printf(" %d ",a[i]);
}
}
复制代码
为什么这样子还可以输出 ? 为什么到了15就输出不了了 ?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
九尾天蝎
九尾天蝎
当前离线
积分
27
IP卡
狗仔卡
发表于 2004-8-8 17:52:49
|
显示全部楼层
胡搞,C是不检查内存溢出的
回复
支持
反对
使用道具
举报
显身卡
alen
alen
当前离线
积分
29
IP卡
狗仔卡
发表于 2004-8-8 20:01:42
|
显示全部楼层
C编译器不做边界检查,你实际使用的超出了数组定义
回复
支持
反对
使用道具
举报
显身卡
shell
shell
当前离线
积分
533
IP卡
狗仔卡
楼主
|
发表于 2004-8-8 23:07:37
|
显示全部楼层
不是,我想问的是,同样都是int a[10]的,为什么a[14]还输得出,可a[15]就输不出 ?
为什么 ?
回复
支持
反对
使用道具
举报
显身卡
kj501
kj501
当前离线
积分
5317
IP卡
狗仔卡
发表于 2004-8-9 09:50:11
|
显示全部楼层
都是越界,有什么本质的区别?如果你想弄清楚这个问题,还是学习一下汇编吧。
回复
支持
反对
使用道具
举报
显身卡
lucifer
lucifer
当前离线
积分
750
IP卡
狗仔卡
发表于 2004-8-9 09:55:11
|
显示全部楼层
标准对于数组越界以后的情况不做保证,这个完全取决于具体实现了。不过在2.4.20内核,gcc 2.96下确实可以一直显示到15
回复
支持
反对
使用道具
举报
显身卡
Illidan
Illidan
当前离线
积分
420
IP卡
狗仔卡
发表于 2004-8-9 10:44:03
|
显示全部楼层
越界后不就是访问不属于该数组的后续内存地址的东东吗?
对没有分配给这个程序的内存地址进行写操作,比较危险。
我在WinXP下,用bcc5.5对以上代码进行编译,可以执行,一直输出到15,然后就用对话框报错。
另:楼主,你的注释符号很成问题,我刚编译时遇到莫名错误,一头雾水的说... ...
回复
支持
反对
使用道具
举报
显身卡
shell
shell
当前离线
积分
533
IP卡
狗仔卡
楼主
|
发表于 2004-8-9 15:29:48
|
显示全部楼层
那这样的话,我平时写简单的程序时,自己却不知道已经越界,程序照样编译得过,那该怎办 ?
回复
支持
反对
使用道具
举报
显身卡
doubleelec
doubleelec
当前离线
积分
773
IP卡
狗仔卡
发表于 2004-8-9 16:10:17
|
显示全部楼层
那只有自己小心了
回复
支持
反对
使用道具
举报
显身卡
lanche
lanche
当前离线
积分
370
IP卡
狗仔卡
发表于 2004-8-9 17:26:08
|
显示全部楼层
对数据的有效性进行检查是程序员的责任。
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
3
/ 3 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
开源软件专题讨论
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表