MyException - 我的异常网
当前位置:我的异常网» C语言 » 结构体数组溢出解决办法

结构体数组溢出解决办法

www.MyException.Cn  网友分享于:2014-04-05  浏览:9次
结构体数组溢出
#include <stdio.h>
#include <string.h>

int search(int key,int a[]);

struct index
{
int key;
int start;
int end;
}index[1];

int main()
{
int i,j=-1,k,key;
int a[]={1,2,3,4,5,6,7,8,9,10,23,43,56,78,99};
printf("array is\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");

for(i=0;i<3;i++)
{
index[i].start=j+1;
j=j+1;
index[i].end=j+4;
j=j+4;
index[i].key=a[j];
}

printf("wanted number\n");
scanf("%d",&key);
k=search(key,a);

if(k>=0)
printf("succeed! the wanted number location %d\n",k+1);
else
printf("not found!\n");
}

int search(int key,int a[])
{
int i,j;
i=0;
while(i<39&& key>index[i].key)
i++;
if(i>=3)
return -1;
j=index[i].start;
while(j<=index[i].end&& a[j]!= key)
j++;
if(j>index[i].end)
j=-1;
return j;
}

我把index【】中改成1  同样没有问题  为什么溢出也能运行
------解决方案--------------------
个人认为与数组类似,当数组溢出时如果其下一个地址没有存放对于整个系统来说比较重要的数据那么溢出后将下一个地址所存放的数据破坏后,运行是不会出现异常的,同样这样的Bug也是比较难发现的,但一旦有问题或者运行时间长了后所造成的结果将会是致命的。
------解决方案--------------------
主要了解一下进程的”虚拟地址空间“概念,你操作的内存如果恰好已被分配,那么读写它是不会出现”段错误“的
------解决方案--------------------
index[i]在运行时其实是这样的:*(idex +i),即在idex的基础上在正向偏移i*(12)个字节的位置(这个12字节,其实就是struct index的大小),再取其中的值,由于你的index之定义了1个元素,那么对于i》=1的情况,所做的诸如 index[i].start赋值,都是在修改index界外的内容;溢出的时,出现什么情况是不一定的,比如你的溢出操作修改了其他进程中正在使用的变量,就会出现问题了,比如造成了空指针操作,程序需肯定就崩溃了。

------解决方案--------------------
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

文章评论

我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
为什么程序员都是夜猫子
为什么程序员都是夜猫子
Java程序员必看电影
Java程序员必看电影
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
鲜为人知的编程真相
鲜为人知的编程真相
我是如何打败拖延症的
我是如何打败拖延症的
总结2014中国互联网十大段子
总结2014中国互联网十大段子
一个程序员的时间管理
一个程序员的时间管理
中美印日四国程序员比较
中美印日四国程序员比较
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
如何成为一名黑客
如何成为一名黑客
程序员都该阅读的书
程序员都该阅读的书
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
代码女神横空出世
代码女神横空出世
老程序员的下场
老程序员的下场
 程序员的样子
程序员的样子
每天工作4小时的程序员
每天工作4小时的程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
漫画:程序员的工作
漫画:程序员的工作
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
那些争议最大的编程观点
那些争议最大的编程观点
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员必看的十大电影
程序员必看的十大电影
编程语言是女人
编程语言是女人
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
10个调试和排错的小建议
10个调试和排错的小建议
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有