Mingw下g++编译执行顺序错误

今天写一个简单的线性表时,用Mingw中的g++编译、调试、运行时发现一个奇怪的现象:程序的执行顺序与实际编写顺序不一致。

编译环境:代码编写  win7下   editplus + Mingw 4.3.3 + g++

代码片段如下:

  1 //function: create a list 
  2 //time:2013-11-8 23:38
  3 //filename:list_01.cpp
  4 //author :alex
  5 #include <stdio.h>
  6 #define MAXSIZE 20 //存储空间初始大小
  7 #define OK 1 //success
  8 #define ERROR 0 // failed
  9 #define TRUE 1
 10 #define FALSE 0
 11 typedef int Status;// 返回函数结果状态
 12 typedef int ElemType;//int 型 ElemType
 13 //定义线性表的结构体
 14 typedef struct 
 15 {
 16  ElemType data[MAXSIZE];//data[20]
 17  int length;//线性表当前长度
 18 }SqList;
 19 //初始化链表0
 20 Status InitList(SqList *L)
 21 {
 22  L->length=0;//指定长度为0
 23  printf("初始化完成...
");
 24  return OK;
 25 }
 26 //打印出链表的内容
 27 Status PrintList(SqList *L)
 28 {
 29  if(L->length > 0)
 30  {
 31  printf("链表元素如下:
");
 32  for(int i=0;i < L->length;i++)
 33  printf("%d	",L->data[i]);
 34  return OK;
 35  }
 36  else
 37  {
 38  printf("L.length=%d",L->length);
 39  return ERROR;
 40  }
 41 }
 42 //取元素 O(1)
 43 Status GetElem(SqList L,int i,ElemType *e)
 44 {
 45  if(L.length==0 || i<1 || i>L.length)
 46  return ERROR;
 47  *e=L.data[i-1];//直接取值data[i-1]
 48  return OK;
 49 }
 50 //插入数据 为i第几个元素位置,从1开始 O(n)
 51 Status ListInsert(SqList *L,int i,ElemType e)
 52 {
 53  int k;
 54  if(L->length==MAXSIZE) //判断满否
 55  return ERROR;
 56  if(i<1 || i> L->length+1) //超出范围
 57  return ERROR;
 58  if(i< L->length)
 59  {
 60  for(k=L->length-1;k>=i-1;k--)
 61  //将要插入位置后的数据元素向后移动一位
 62  L->data[k+1]=L->data[k];
 63  }
 64  L->data[i-1]=e;//插入新元素
 65  L->length++; //线性表长度+1
 66  return OK;
 67 }
 68 //删除数据 删除第i个位置元素,用e返回其值 O(n)
 69 Status ListDelete(SqList *L,int i,ElemType *e)
 70 {
 71  int k;
 72  if(L->length==0)//线性表为空
 73  return ERROR;
 74  if(i<1 || i> L->length)//删除位置超出
 75  return ERROR;
 76  *e=L->data[i-1]; //i位置元素取出
 77  if(i< L->length) //位置适当
 78  { 
 79  for(k=i;k < L->length;k++)
 80  L->data[k-1]==L->data[k];
 81  }
 82  L->length--;
 83  return OK;
 84 }
 85 int main(int argc, char *argv[])
 86 {
 87  int i,j,k;
 88  printf("This is a list_demo:
");
 89  SqList list;
 90  //初始化链表list长度为5
 91  InitList(&list);
 92  //数组长度与链表长度的关系???
 93  //回显
 94  printf("list.length=%d 
",list.length);
 95  //插入元素
 96 
 97  printf("插入5个元素
");
 98  /*
 99  for(i=0;i<5;i++)
100  {
101  scanf("%d",&k);
102  ListInsert(&list,i+1,k);
103  }
104  */
105  i=0; 
106  while (i<5)
107  {
108  scanf("%d",&k);
109  ListInsert(&list,i+1,k);
110  i++;
111  }
112  PrintList(&list);
113  return 0;
114 }
View Code

截图输出    需要先输入之后才执行main函数开始部分,奇怪哉???

Mingw下g++编译执行顺序错误

然而在gdb调试输出时,却又是正确的,见下:

Mingw下g++编译执行顺序错误

问题是怎样产生的尚不明确,猜测与Mingw下g++编译器有关,尚待调查中。。。。