Witam!

Chciałbym bardzo prosić o pomoc, gdyż nie potrafię znaleźć problemu w moim kodzie. Sam kod nie jest w mistrzowskim stylu, ale myślę, że wszystko jest napisane poprawnie. Podczas kompilacji kodu nie wyskakują mi żadne errory, ostrzeżenia. Lecz gdy uruchomię program, to w pewnym momencie przestaje on działać( dochodzi tylko do momentu wyświetlenia zmiennej Cmax2 na ekranie), a gdy poddam kod debugowaniu, wtedy w trybie debugowania program wykonuje się do samego końca(wtedy wyświetlane są wszystkie zmienne i mają one poprawną wartość, następuje też utworzenie pliku i zapis do niego), lecz z debugera wyskakuje komunikat "program received signal sigtrap, TRACE/breakpoint trap". Bardzo chciałbym dowiedzieć się, co w moim kodzie jest nie tak.
Program pisany w DevC++.
Poniżej zamieszczam kod

Klasa zadanie

#ifndef ZADANIE_H
#define ZADANIE_H
class zadanie
{
public:
        int R;
        int P;
        int Q;
        void czytaj(int r, int p, int q);
        };
 
#endif
#include "zadanie.h"
 
 
void zadanie::czytaj(int r, int p, int q)
{
        R=r;
        P=p;
        Q=q;
}

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <list>
#include "zadanie.h"
 
 
int max(int a, int b);
void wylicz_Cmax(zadanie *pomoc, int rozmiar, int &t, int &Cmax);
void sortowanie_po_R(zadanie *sortuj, int rozmiar);
void sortowanie_po_Q(zadanie *sortuj, int rozmiar);
void Schrage(zadanie *sortuj, int rozmiar, int &t, int &Cmax);
 
 
using namespace std;
 
int main()
{
    cout << "Wybierz plik\n";
    cout << "1- 100.txt" << endl;
    cout << "2- 200.txt" << endl;
    cout << "3- 500.txt" << endl;
    cout << endl;
    int rozmiar;
        int liczba_par;
        int a,b,c;
        int i=0;
 
    int wybor;
    cin >> wybor;
 
        ifstream plik;
 
        int Cmax1=0;
        int Cmax2=0;
        int Cmax3=0;
        int t1=0;
        int t2=0;
        int t3=0;
 
    if (wybor==1)
    plik.open("rpq_100.txt");
    if (wybor==2)
        plik.open("rpq_200.txt");
    if(wybor==3)
    plik.open("rpq_500.txt");
    if(!plik.good())
    {
        cout << "Niepoprawne otwarcie pliku\n";
                exit(0);
    }
        plik >> rozmiar;
        plik >> liczba_par;
 
        zadanie *baza;
    baza= new zadanie[rozmiar];
        zadanie zad;
 
 
 
        while(!plik.eof())
        {
                plik>> a >> b >> c;
                zad.czytaj(a,b,c);
                baza[i]= zad;
                i++;
 
        }
    wylicz_Cmax(baza, rozmiar,t1, Cmax1);
    cout << "Wartosc Cmax przed sortowaniem dla " << rozmiar << " elementow: "<< Cmax1 << ' ' << "ms" << endl << endl;
 
    sortowanie_po_R(baza, rozmiar);
 
    wylicz_Cmax(baza, rozmiar, t2, Cmax2);
    cout << "Wartosc Cmax po sortowaniu po R dla " << rozmiar << " elementow: "<< Cmax2 << ' ' << "ms" << endl << endl;
 
    Schrage(baza,rozmiar, t3, Cmax3);
    cout << "Wartosc Cmax po sortowaniu algorytmem Schrage dla " << rozmiar << " elementow: "<< Cmax3 << ' ' << "ms" << endl << endl;
 
    ofstream wynik;
    if (wybor==1)
    wynik.open("out_100.txt");
    if (wybor==2)
    wynik.open("out_200.txt");
    if(wybor==3)
    wynik.open("out_500.txt");
    if(!wynik.good())
        cout << "Blad zapisu\n";
    wynik << "Wartosc Cmax przed sortowaniem dla " << rozmiar << " elementow: "<< Cmax1 << ' ' << "ms" << endl << endl;
    wynik << "Wartosc Cmax po sortowaniu po R dla " << rozmiar << " elementow: "<< Cmax2 << ' ' << "ms" << endl << endl;
    wynik << "Wartosc Cmax po sortowaniu algorytmem Schrage dla " << rozmiar << " elementow: "<< Cmax3 << ' ' << "ms" << endl << endl;
 
    plik.close();
    wynik.close();
    delete [] baza;
    return 0;
}
 
int max(int a, int b)
{
    if (a >b)
                return a;
        else
                return b;
}
 
void wylicz_Cmax(zadanie *pomoc, int rozmiar, int &t, int &Cmax)
{
    for (int i=0; i< rozmiar; i++)
    {
        t= max(t, pomoc[i].R) + pomoc[i].P;
        Cmax= max(Cmax, t+ pomoc[i].Q);
    }
 
}
 
void sortowanie_po_R(zadanie *sortuj, int rozmiar)
{
    int przesun, x, j;
    for(przesun = 1; przesun< rozmiar; przesun= 3* przesun+ 1);
    przesun /= 9;
    while(przesun)
        {
            for(int i= rozmiar- przesun- 1; i>= 0; i--)
            {
              x = sortuj[i].R;
              j = i+ przesun;
              while((j < rozmiar) && (x > sortuj[j].R))
              {
                sortuj[j- przesun].R = sortuj[j].R;
                j += przesun;
              }
              sortuj[j- przesun].R= x;
            }
            przesun/= 3;
        }
 
}
 
 
void Schrage(zadanie *sortuj, int rozmiar, int &t, int &Cmax)
{
        zadanie e;
    list < zadanie > N;
    list < zadanie > G;
        
                
    for(int i=0; i< rozmiar; i++)
        N.push_back(sortuj[i]);
        
    while(!G.empty() || !N.empty())
    {
        if(G.empty())
            t= N.front().R;
        while(!N.empty() && N.front().R <=t)
            {
        e= N.front();
        G.push_back(e);
        N.pop_front();
            }
            int p_roz= G.size();
            zadanie *pom= new zadanie [p_roz];
        for(int i=0; i< p_roz; i++)
        {
                pom[i]= G.front();
                G.pop_front();
        }
                sortowanie_po_Q(pom, p_roz);
        for(int i=p_roz-1; i>=0; i--)
                G.push_back(pom[i]);
        
    e= G.front();
    G.pop_front();
    t=t+e.P;
    Cmax= max(Cmax, (t+ e.Q));
    delete [] pom;
    }   
}
void sortowanie_po_Q(zadanie *sortuj, int rozmiar)
{
        int przesun, x, j;
    for(przesun = 1; przesun< rozmiar; przesun= 3* przesun+ 1);
    przesun /= 9;
    while(przesun)
        {
            for(int i= rozmiar- przesun- 1; i>= 0; i--)
            {
              x = sortuj[i].Q;
              j = i+ przesun;
              while((j < rozmiar) && (x > sortuj[j].Q))
              {
                sortuj[j- przesun].Q = sortuj[j].Q;
                j += przesun;
              }
              sortuj[j- przesun].Q= x;
            }
            przesun/= 3;
        }       
}

Oraz plik tekstowy, który wczytuje jako 'rpq_100'.
100 3
1473 24 575
470 42 838
516 49 231
906 43 1110
368 38 1061
888 19 445
688 2 29
391 40 503
347 3 974
1447 8 133
269 19 34
1428 48 1365
127 44 1110
1348 39 1220
238 20 1069
130 31 742
745 3 1357
28 44 685
509 33 722
681 4 34
466 50 1461
269 41 377
175 14 1490
1455 38 1443
890 43 359
1098 21 1461
951 45 337
1497 41 1006
1140 48 76
1064 10 743
1187 45 1483
270 10 264
53 43 505
918 2 1223
598 25 1405
947 11 949
1129 35 20
198 24 680
324 47 456
1227 48 1237
1057 1 642
857 41 733
698 10 103
1344 22 332
1336 15 11
323 18 772
380 46 1188
87 10 1180
263 19 757
987 7 1213
1177 3 655
424 12 308
319 3 19
606 5 867
878 41 1218
868 34 1444
225 8 291
1242 8 1364
813 26 124
734 11 587
456 46 127
637 34 1217
640 48 354
635 45 557
1067 10 996
898 42 896
29 48 1299
742 26 9
323 36 1405
563 4 1374
428 31 1055
536 16 888
1476 20 401
424 48 669
1060 10 1410
756 38 182
1096 47 374
1188 9 862
1245 45 1400
850 18 257
928 39 1486
1194 42 1137
238 11 404
384 34 1449
1345 29 739
418 47 1424
398 16 326
1186 34 1255
801 2 483
291 14 534
1216 31 1198
75 16 1441
794 23 1500
503 23 1461
988 41 1086
719 7 76
136 40 709
1310 42 126
315 50 66
1214 14 507