Sortowanie przez zliczanie - unhandled exception

Sortowanie przez zliczanie - unhandled exception
I6
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 10 lat
  • Postów:15
0

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

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

jakieś sugestie w czym problem?

Kopiuj
 // 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;
}
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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:

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

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
fasadin
prawie 9000 post. Pozniej jak bedziesz miec 9001 mozesz zrobic topic. OVER 9000 i wkleic link do vegety :DD

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.