2014-11-05 97 views
2

我在C語言培訓,我正在做一個程序,創建一個簡單的數組和排序他。 下面的代碼:運行時檢查失敗#2 - 圍繞變量「選項卡」堆棧已損壞

MAIN.C:

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, int *argv[]) 
{ 
    int tab[5]={2,5,3,9,4}, i=0, longueur=0; 

    /*for(i=0; i<5; i++) 
    { 
     tab[i] = i; 
    }*/ 

    longueur = sizeof(tab)/sizeof(tab[0]); 
    trierTab(tab,longueur); 
    afficherTab(tab,longueur); 
    return 0; 

Tableaux.c:

#include "tableaux.h" 

//Sort the array 
void trierTab(int tab[],int longueur) 
{ 
    int i=0, j=0,max=0,indiceMax=0,temp=0; 

    for(i=longueur-1; i>=1;i--) 
    { 
     for(j=0;j<=i;j++) 
     { 
      if(tab[j]>max) 
      { 
       max = tab[j]; 
       indiceMax = j; 
      } 
     } 

     temp=tab[j]; 
     tab[j]=max; 
     tab[indiceMax]=temp; 
    } 
} 



//Print the array 
void afficherTab(int tab[], int longueur) 
{ 
    int i=0; 

    for(i=0;i<longueur;i++) 
    { 
     printf("| %d |",tab[i]); 
    } 
} 

我想,有一個出界的錯誤,但我可以」不知道她在哪裏:s 有人可以幫我嗎? ^^

+1

邊界環路'用於之後的(j = 0;Ĵ<= I; J ++)'具有完成'j'的值爲'i + 1',然後用於'tab [j] = max'。但是'i'開始爲'i = longueur-1',所以'j'可以是'longueur',它超出了數組邊界。 – 2014-11-05 11:16:36

+0

Omfg,我很笨x) 謝謝你:) – DoT 2014-11-05 11:24:41

回答

1

當您從此退出for循環的第一次:

for(j=0;j<=i;j++) 
    { 
     if(tab[j]>max) 
     { 
      max = tab[j]; 
      indiceMax = j; 
     } 
    } 

j值是5

然後分配:

temp=tab[j]; 

所以你正在讀出的tabtemp=tab[5];

相關問題