Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ako pozovem ovu funkciju program se sruši pri gašenju

[es] :: C/C++ programiranje :: Ako pozovem ovu funkciju program se sruši pri gašenju

[ Pregleda: 2073 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maximus_1
Max Maximus

Član broj: 46848
Poruke: 277
*.tel.net.ba.



Profil

icon Ako pozovem ovu funkciju program se sruši pri gašenju22.09.2006. u 14:54 - pre 213 meseci
Na prozoru gdje pregledavam rezultate ostvarenih vremena napravio sam i funkciju koja sortira rezultate od najboljeg do najgoreg. Ako pozovem taj prozor sve je u redu dok ne idem ugasiti program kada se pojavi error i Onaj dijalog Don't send/send to microsoft. Ako pak pokrenem program na ne pozovem prozor zsa rezultatima sve je ok. Shvatio sam da je problem u sljedećoj funkciji:

Code:
BOOL __fastcall TfrmResults::SortResultTimes(struct PlayerInf *Player, int n) {
    AnsiString tmTime;
    AnsiString tmpName, tmpTime;

    int tmpP;
    int *pTime = new int[n-1];

    for (int i = 1; i <= n; i++) {
        tmTime = "000000";

        tmTime[1] = Player[i-1].Time[1];
        tmTime[2] = Player[i-1].Time[2];
        tmTime[3] = Player[i-1].Time[4];
        tmTime[4] = Player[i-1].Time[5];
        tmTime[5] = Player[i-1].Time[7];
        tmTime[6] = Player[i-1].Time[8];

        int len = tmTime.Length();

        for (int j = 1; j <= 6; j++) {
            if (tmTime[1] == '0') {
                for (int c = 1; c < len; c++) {
                    tmTime[c] = tmTime[c+1];
                }
                tmTime.SetLength(tmTime.Length() - 1);
                len--;
            } else {
                break;
            }
        }

        pTime[i-1] = StrToInt(tmTime);
    }

    for (int i = 0; i < n-1; i++) {
        for (int j = i+1; j < n; j++) {
            if (pTime[i] > pTime[j]) {
                tmpName = Player[i].Name;
                tmpTime = Player[i].Time;
                Player[i].Name = Player[j].Name;
                Player[i].Time = Player[j].Time;
                Player[j].Name = tmpName;
                Player[j].Time = tmpTime;

                tmpP = pTime[i];
                pTime[i] = pTime[j];
                pTime[j] = tmpP;
            }
        }
    }

    delete [] pTime;

    return TRUE;
}


ako je ne pozovem u prozoru tj. ne sortiram rezultate sve je ok, samo ne mogu shvatit gdje sam pogriješio.

Kada mi se program srušim dok sam u ide onda pokaže RunTime error 204 at ...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Ako pozovem ovu funkciju program se sruši pri gašenju22.09.2006. u 16:05 - pre 213 meseci
Citat:

int *pTime = new int[n-1];

Nisam nesto dublje studirao kod, ali mislim da ovde treba:
Code:

int *pTime = new int[n];

... jer ako je n=10, onda indeksi idu od 0 do 9, pa ne treba dodatno
umanjivati 'n'.

 
Odgovor na temu

maximus_1
Max Maximus

Član broj: 46848
Poruke: 277
*.tel.net.ba.



Profil

icon Re: Ako pozovem ovu funkciju program se sruši pri gašenju22.09.2006. u 18:17 - pre 213 meseci
Čini se da je to bio problem samo mi nije jasno zašto se program tako ponašao. U svakom slučaju hvala.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.235.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Ako pozovem ovu funkciju program se sruši pri gašenju22.09.2006. u 18:23 - pre 213 meseci
U principu, ti si postavio podatak u nealocirani deo memorije, i time si
verovatno nešto drugo "overwrite-ovao", što je kasnije izazvalo problem.

Probaj da naučiš da koristiš Code Guard (CG) koji se već nalazi u okviru
Borland C++ Builder IDE-a. Potraži ga u Project / Options i samo čekiraj
tih nekoliko stavki, pa izbilduj projekat ponovo.

Izvrši program (neispravan) pa pogledaj fajl *.cgl.

 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Ako pozovem ovu funkciju program se sruši pri gašenju22.09.2006. u 18:53 - pre 213 meseci
Stvarno nema potrebe da tako alociras niz. U c++ treba kad god je moguce koristiti STL kontejnere.

Dakle u tvom slucaju jedna sitna izmena u kodu te oslobadja svih briga u vezi alokacije i dealokacije:

Code:
//Dodati ovaj include
#include <vector>

//pa zatim zameni ovu liniju
int *pTime = new int[n-1];
//sa ovom
std::vector<int> pTime(n,0); //alocira niz od n intova i sve ih inicijalizuje sa 0

//i ovo izbaci
//delete [] pTime;



Tko leti vrijedi
 
Odgovor na temu

[es] :: C/C++ programiranje :: Ako pozovem ovu funkciju program se sruši pri gašenju

[ Pregleda: 2073 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.