数组下标越界引起的问题

金鸡湖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);
}

程序是一哥们写的,问题的出现太突然以至于本菜鸟小弟来不及接受。在这里恳请各位大侠慷慨拔刀相助!分会有的!
...全文
283 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
这个就有点随机了,数组越界时肯定会影响内存,但是具体到会影响那一块就有点随机了,要看堆栈内内存的分配顺序,最好的办法就是解决越界的问题,消除隐患

70,023

社区成员

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

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