[MSVC] Debug en Release probs

Pagina: 1
Acties:

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-09 14:58
Hallo

Ik ben zelf wat aan het prutsen in MSVC6, maar nu heb ik een 'vaag' probleem:

Als ik het programma in 'Win32 Debug' compile, gaat alles goed. Dus het programma werkt ok.
Maar als ik em als 'Win32 Release' compile, krijg ik meteen na het starten het beruchte
'Dit programma heeft een ongeldige bewerking uitgevoerd' scherm.

Nu ben ik wat gaan prutsen en heb ik het volgende gevonden.
Als ik de text van mijn (eigen) klasse Label op de volgende manier instel:
code:
1
Label->SetText("Hallo?? Dit is een tekstvak met wordwrapping die aan (!) staat :) blablablaaaaaaaaaaa");

werkt het goed in de debugmode maar dus niet in de release mode.

Maar als ik die regel dan vervang door de volgende:
code:
1
Label->SetText("Hallo?? Dit is en tekstvak met wordwrapping die aan (!) staat :) blablablaaaaaaaaaaa");

(1 teken minder) werkt het in debug EN release mode gewoon goed!
Als ik dus de waarde van de SetText() functie langer maak, krijg ik steeds weer dezelfde fout.

Weet iemand wat het probleem hierbij is??

Alvast bedankt

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
das vaag :) ik denk dat je ff je SetText-functie moet posten

  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 11-09 14:32
Declareer je ruimte voor die string (ga ervan uit dat je die gebruikt) waarin de tekst komt te staan? Zo ja, klopt de grootte hiervan met het aantal characters wat je erin wilt zetten? Het is inderdaad zo dat bij een programma dat in Debug mode gecompiled wordt, bepaalde zaken (zoals het overschrijven van geheugengebieden) wat ruimer worden behandeld. In tegenstelling tot Release mode. Post inderdaad anders effe die functie, kijkt wat makkelijker. :)

"The fastest code, is the code that is never called."


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 17-09 14:58
Dit is de SetText functie
code:
1
2
3
4
5
RESULT cLabel :: SetText(cstring Txt)
{
    Text = Txt;
    return R_OK;
}

en dit is de cstring klasse
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class cstring
{
private:
    
public:
    char *p;
    cstring(const char *str="");
    cstring(const cstring &x);
    ~cstring() { delete[] p; }
    cstring &operator=(const cstring &x);
    friend cstring operator+(const char *p, const cstring &y);
    friend cstring operator+(const cstring &x, const char *p);
    operator const char*() { return p; }
};

en natuurlijk de bijbehorende functies enzo
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
35
36
37
38
39
40
41
cstring :: cstring(const char *str)
{
    p = new char[strlen(str)+1];
    strcpy(p,str);
}

cstring :: cstring(const cstring &x)
{
    p = new char[strlen(x.p)+1];
    strcpy(p,x.p);
}

cstring &cstring::operator=(const cstring &x)
{
    char *pnieuw;
    pnieuw = new char[strlen(x.p)+1];
    strcpy(pnieuw,x.p);
    delete[] p;
    p = pnieuw;
    return *this;
}

cstring operator+(const cstring &x, const cstring &y)
{
    char *pnieuw = new char[strlen(x.p)+strlen(y.p)+1];
    strcpy(pnieuw,x.p);
    strcat(pnieuw,y.p);
    cstring s(pnieuw);
    delete[] pnieuw;
    return s;
}

cstring operator+(const char *p, const cstring &y)
{
    return cstring(p) + y;
}

cstring operator+(const cstring &x, const char *p)
{
    return x + cstring(p);
}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 18:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

hoewel deze code verre van efficient is :), zie ik er verder geen fouten in...

misschien moet je eens proberen je release versie met debug symbols te compilen, en dan met f5 te runnen. Dan kun je ongeveer zien op welke regel code ie nou crasht

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.