数组下标越界引起的问题

金鸡湖123 2012-11-14 10:09:08
一个程序中有指针数据,有数组。
指针初始化后,系统应该分配内存空间。
紧接着初始化数组,但在此时数组初始化时越界,但越界之前分配的内存空间应该是合法的。问题在此时出现了:当越界现象出现时,原来分配的数据段的结构在内存中会不会变化?

#include"stdio.h"
#include"stdlib.h"
#define NULL 0
#define N 1
typedef struct _node{
int page;
int flag;
int mem;
int state;
int ci;
char m;
struct _node* next;
}node;
typedef struct _copy{
int pae;
int block;
char n;
struct _copy* next;
}copy;

void show(node* h)
{node *p;
p=h->next;
puts("页号:\n");
printf("%d",p);
while(p)
{printf("%d\n",p->page);
p=p->next;
}
}
void main()
{
int i,n;
node* head;
head=(node*)malloc(sizeof(node));
head->next = NULL;
node *p;
p=(node*)malloc(sizeof(node));
p->page=2;
p->flag=1;
p->mem=1;
p->state=0;
p->ci=0;
p->m=97;
p->next=head->next;
head->next = p;

for(i=0;i<9;i++)
{
end[i].n=97+i;end[i].block=i;//注意当 i = 8 时数组下标越界
end[i].pae=i;
}
show(head);
}

程序是一哥们写的,问题的出现太突然以至于本菜鸟小弟来不及接受。在这里恳请各位大侠慷慨拔刀相助!分会有的!
...全文
262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
金鸡湖123 2012-11-18
  • 打赏
  • 举报
回复
嗯,谢谢大家!
wangqiang1101 2012-11-16
  • 打赏
  • 举报
回复
有时越界并不会出现段错误 是因为你没越出分配的空间,系统分配空间都是一页一页的分配 一般是4096个字节 ,因为虚拟空间没有跟物理空间影射 只是非法访问而已所以不会出现段错误,段错误是因为你出了那个范围
转角天边 2012-11-14
  • 打赏
  • 举报
回复
进程直接over了,还讨论它以前分配的内存有意义吗
金鸡湖123 2012-11-14
  • 打赏
  • 举报
回复
不好意思啊大家 少写了一句话

copy end[8];
慧钦 2012-11-14
  • 打赏
  • 举报
回复
哥们给的程序不完整啊, 当对越界的地址进行写入时,程序都会挂掉的。
breakfisher 2012-11-14
  • 打赏
  • 举报
回复
这个就有点随机了,数组越界时肯定会影响内存,但是具体到会影响那一块就有点随机了,要看堆栈内内存的分配顺序,最好的办法就是解决越界的问题,消除隐患
C语言的链表基本操作 准备:动态内存分配 一、为什么用动态内存分配 但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组: float score[30]; 但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大? 在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的学生的人数,那么你就要把数组定义得足够大。这样,你的程序在运行时就申请了固定大小的你认为足够大的内存空间。即使你知道该班级的学生数,但是如果因为某种特殊原因人数有增加或者减少,你又必须重新去修改程序,扩大数组的存储范围。这种分配固定大小的内存分配方法称之为静态内存分配。但是这种内存分配的方法存在比较严重的缺陷,特别是处理某些问题时:在大多数情况下会浪费大量的内存空间,在少数情况下,当你定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。 那么有没有其它的方法来解决这样的外呢体呢?有,那就是动态内存分配。 所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于景泰内存分配的特点:

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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