2014-11-05 95 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];

相关问题