为什么同一个程序运行结果和调试结果不一样?

qq_33997510 2019-01-16 11:28:56
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;

int InitList_Sq(SqList *L)
{
L->elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int)); //INIT_SIZE是10
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}

int main(void)
{
SqList L;
InitList_Sq(&L);
L.elem[0] = 25;
L.elem[1] = 1;
L.elem[2] = 2;
L.elem[3] = 5;
L.elem[4] = 4;
L.elem[5] = 5;
L.elem[6] = 6;
L.elem[7] = 7;
L.elem[8] = 8;
L.elem[9] = 9;
L.elem[11] = 11;
L.elem[12] = 15;
L.elem[100] = 19;
printf("%d",L.elem[5]);
}


第一个问题是:在InitList_Sq()函数里里已经指定了内存的大小是10个int ,为什么L.elem[12]不会报错?

第二个问题是:为什么这个程序运行的时候没有结果,而debug的时候却可以有正确的结果5?
...全文
1079 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-01-17
  • 打赏
  • 举报
回复
首先编译器不会检查数组越界的问题,越界访问运行中结果是未定义的,即越界访问可能会影响后面变量的值(如果后面还有变量)。
赵4老师 2019-01-16
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

69,368

社区成员

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

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