运行时检查失败#2 - 变量“tab”周围的堆栈已损坏

时间:2014-11-05 11:05:20

标签: c

我用C语言进行培训,我正在做一个创建简单数组并对其进行排序的程序。 这是代码:

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 个答案:

答案 0 :(得分: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];

的界限