Mingw下g++編譯執行順序錯誤

今天寫一個簡單的線性表時,用Mingw中的g++編譯、調試、運行時發現一個奇怪的現象:程序的執行順序與實際編寫順序不一致。數組

編譯環境:代碼編寫  win7下   editplus + Mingw 4.3.3 + g++app

代碼片斷以下:ide

  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("初始化完成...\n");
 24  return OK;
 25 }
 26 //打印出鏈表的內容
 27 Status PrintList(SqList *L)
 28 {
 29  if(L->length > 0)
 30  {
 31  printf("鏈表元素以下:\n");
 32  for(int i=0;i < L->length;i++)
 33  printf("%d\t",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:\n");
 89  SqList list;
 90  //初始化鏈表list長度爲5
 91  InitList(&list);
 92  //數組長度與鏈表長度的關係???
 93  //回顯
 94  printf("list.length=%d \n",list.length);
 95  //插入元素
 96 
 97  printf("插入5個元素\n");
 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函數開始部分,奇怪哉???函數

然而在gdb調試輸出時,卻又是正確的,見下:spa

11

問題是怎樣產生的尚不明確,猜想與Mingw下g++編譯器有關,尚待調查中。。。。調試

相關文章
相關標籤/搜索