Toon posts:

[VC++] Pointer vraagje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik vraag een vector op deze manier op
code:
1
2
3
vector<Tijdregistratie> * Tijd_vec;

Tijd_vec = pspmanager.GetTijdregistraties();

en in die manager staat deze als volgt gereturned
code:
1
return (*activiteiten)[i].GetTijdregistraties();

en deze haalt de gegevens uit
code:
1
2
3
4
5
vector <Tijdregistratie> * Activiteit::GetTijdregistraties()
{

    return &tijdregistraties;
}

Nou start ik het programma op, maar krijg ik direct in XP een fout waarbij je een rapport kan verzenden en wordt het programma afgesloten. Dit heeft ongetwijfeld met al die pointers te maken maar weet iemand wat er misgaat en wat een eventuele oplossing zou zijn?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:31
Al eens gedebugged?

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 20:54 schreef Soultaker het volgende:
Al eens gedebugged?
Net ff gedaan, maar ook daar wordt ik niet echt wijzer van. Ik krijg een "Unhandled Exception in App.exe". en dan komt er zo'n mooi geel pijltje bij een regel te staan en dit staat er op die regel:
code:
1
2
    size_type size() const
        {return (_First == 0 ? 0 : _Last - _First); }

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:31
Op dinsdag 11 juni 2002 20:56 schreef Hakkert het volgende:
Net ff gedaan, maar ook daar wordt ik niet echt wijzer van. Ik krijg een "Unhandled Exception in App.exe". en dan komt er zo'n mooi geel pijltje bij een regel te staan en dit staat er op die regel:
code:
1
2
    size_type size() const
        {return (_First == 0 ? 0 : _Last - _First); }
Blijkbaar gaat 't fout bij het opvragen van de size van een vector. De vector-pointer die je krijgt zal wel ongeldig zijn, maar dat kan ook wat anders zijn. Probeer te traceren waar in je eigen code (en dus niet de STL template broncode, die wel correct is) het fout gaat.

Denk eraan dat je met watches kan zien welke waarden in welke variabelen zitten. Stap desnoods regel voor regel door het programma tot je ziet dat er een waarde in een variabele komt die er niet in hoort te zitten.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

en dan kijk je vervolgens bij je stackframe vanwaar size () wordt aangeroepen, en hup, je hebt je stukje code waar het de mist in gaat

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Op het moment dat ik deze regel weghaal start het programma op.
code:
1
Tijd_vec = pspmanager.GetTijdregistraties();

Ik zit net ff te denken. Als er nou geen vector terugkomt, omdat deze bijvoorbeeld niet bestaat of er staat niks in. Zou het programma je er dan uitknallen?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:31
Op dinsdag 11 juni 2002 21:07 schreef Hakkert het volgende:
Op het moment dat ik deze regel weghaal start het programma op.
code:
1
Tijd_vec = pspmanager.GetTijdregistraties();

Ik zit net ff te denken. Als er nou geen vector terugkomt, omdat deze bijvoorbeeld niet bestaat of er staat niks in. Zou het programma je er dan uitknallen?
Op dat moment nog niet. Je mag best een ongeldige waarde in een pointer stoppen, mits er binnen GetTijdregistraties() geen fout optreedt. Het gaat pas mis als je probeert (onder andere) methoden aan te roepen op de ongeldige pointerwaarde.

Verwijderd

Topicstarter
Ik probeer nu iets anders en nu gooit hij me eruit op deze regel
code:
1
MyListview.TimeToString(TijdStart,TijdStartarray);

Ik vul de vector nu ff lokaal en nog gooit tie me eruit.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char* TijdStartarray;
time_t TijdStart =10;
    
Tijdregistratie tijdregistratie;
vector<Tijdregistratie> Tijd_vec;

tijdregistratie.SetEindTijd (EindTijd);
tijdregistratie.SetStartTijd(TijdStart); 

Tijd_vec.push_back(tijdregistratie);
    
for (int i=0; i < Tijd_vec.size(); i++)
    {
        MyListview.TimeToString(TijdStart,TijdStartarray);

en dit is dan TimeToString
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void CMyListview::TimeToString(unsigned int theTime, char * time)
{
    int sec, min, hour;
    char strSec[3], strMin[3], strHour[3];

    hour = (theTime / 3600);
    _itoa(hour, strHour, 10);
    
    if (hour <10)
        strcpy(time, "0");
    else
        strcpy(time, "");

    strcat(time, strHour);
    strcat(time, ":");

    min = ((theTime - hour* 3600) / 60);
    _itoa(min, strMin, 10);

    if (min < 10)
        strcat(time, "0");

    strcat(time, strMin);
    strcat(time, ":");

    sec = ((theTime - hour*3600 - min * 60));
    _itoa(sec, strSec, 10);
    
    if (sec < 10)
        strcat(time, "0");
    
    strcat(time, strSec);

}

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 18:17
return (*activiteiten)[i].GetTijdregistraties();

wat voor code staat hier nog meer omheen? Want als je dit een i-loop hebt staan gaat dit denk ik niet werken.
Dan return je binnen dezelfde functie meerdere vectors en dat kan dan zo niet d8 ik.

Verwijderd

Topicstarter
Dit is de code die bij die hele functie hoort
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
vector <Tijdregistratie> * PSPManager :: GetTijdregistraties()

{
    vector <Activiteit> *activiteiten;



    for (int i=0;i<projecten.size();i++) {
        if ( projecten[i].GetOmschrijving() == selectedproject ) {

            activiteiten = projecten[i].GetActiviteiten();

            break;

        }

    }



    for ( i=0;i<activiteiten->size();i++) {
        if ( (*activiteiten)[i].GetOmschrijving() == selectedactiviteit ) {

            return (*activiteiten)[i].GetTijdregistraties();

        }

    }

}

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 18:17
if ( projecten[i].GetOmschrijving() == selectedproject )

Aannemende dat een Omschrijving een char oid is, moet je dan geen stringcompare toepassen?

Hoe moet jouw bovenliggende functie weten of de functie gelukt is of niet?

Verwijderd

Topicstarter
Op dinsdag 11 juni 2002 22:28 schreef DrClearbottom het volgende:
if ( projecten[i].GetOmschrijving() == selectedproject )

Aannemende dat een Omschrijving een char oid is, moet je dan geen stringcompare toepassen?

Hoe moet jouw bovenliggende functie weten of de functie gelukt is of niet?
Het zijn allebei strings. De functie weet niet of tie geslaagd is en op dit moment staan er ook nog geen onderdelen in die vectoren. Alleen probeer ik het dus met een vector in de klasse zelf waar ik er wordt uitgegooid en zelfs dat werkt niet
Pagina: 1