Sortowanie przez zliczanie - unhandled exception

0

Mam problem z poniższym kodem, wywala mi unhandled exception w linijce

  ++TPom[T[i]];               // po tych operacjach TPom[i] będzie zawierała

jakieś sugestie w czym problem?

 // counting sort.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <cstring>
#include <iostream>
#include <time.h>
#include <Windows.h>
 
 
using namespace std;
const int iloscElementow=10;
const int zakres=100;
 
void losuj(int * t)
{
    int i=0;
    srand( time( NULL ) );
    for(i=0;i<iloscElementow;++i)
    {
        t[i]=rand()%zakres;
       
 
    }
       // cout<<"Wylosowano "<<iloscElementow<<" elementow"<<endl<<endl;
    }
 
 
void countingSort(int *tab)
{
 
        int T[iloscElementow]; // tablica zawierająca elementy do posortowania
        int Tp[iloscElementow]; // tablica zawierająca elementy posortowane
        int TPom[zakres]; // zawiera liczbę elementów o danej wartości
 
        int i; // zmienna pomocnicza
 
        for(i = 0 ; i < zakres ; ++i)
    TPom[i] = 0;                // zerowanie tablicy
 
        for(i = 0 ; i < iloscElementow ; ++i)
    ++TPom[T[i]];               // po tych operacjach TPom[i] będzie zawierała
                                // liczbę wystąpień elementów o kluczach mniejszych od i
        for(i = 1 ; i < zakres ; ++i)
    TPom[i] += TPom[i-1];       // teraz TPom[i] zawiera pozycje w posortowanej
                                // tablicy ostatniego elementu o kluczu i
        for(i = iloscElementow-1 ; i >= 0 ; --i)
     Tp[--TPom[T[i]]] = T[i];   // wstawienie elementu na odpowiednią pozycję
                                // i aktualizacja TPom
}
 
int _tmain(int argc, _TCHAR* argv[])
{
        int tab[iloscElementow];
        losuj(tab);
        countingSort(tab);
        for (int i=0; i<iloscElementow;++i)
        {
                cout<<tab[i]<<endl;
        }
        return 0;
}
2

Ech bo twoje T[i] wewnatrz funkcji to NIE JEST tablica którą przekazałes tam jako argument (ta nazywa się "tab") tylko NOWA tablica zawierająca śmieci. Skoro zawiera śmieci to wartości w niej mogą być bardzo duże, ergo T[i] daje ci jakąś bardzo dużą liczbę więc TPom[duża_liczba] wysypuje program bo próbujesz czytać z pamięci gdzie w bardzo dziwnym miejscu.

To jest bzdura:

int T[iloscElementow]; // tablica zawierająca elementy do posortowania
void countingSort(int *tab) // tab to jest tablica zawierająca elementy do sortowania...

1 użytkowników online, w tym zalogowanych: 0, gości: 1