[c++] raar geheugen probleem?

Pagina: 1
Acties:

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class bla
{
private:
    char *Tekst;
public:
    void ZetTekst(char *t);
    void doeiets();
};

void bla :: ZetTekst(char *t)
{
    Tekst = new char[strlen(t)+1];
    strcpy(Tekst,t);
}

void bla :: doeiets()
{
    cout << Tekst << endl;
}

code:
1
2
3
4
bla *Nieuw = new bla;

Nieuw->ZetTekst("hallo hoi alles goed ja ok doei");
Nieuw->doeiets();


heb ik dus bijvoorbeeld.
Maar de functie doeiets() laat alleen het woord 'hallo' zien en verder nix.
als ik een cout plaats in de ZetTekst() functie, laat deze wel de hele regel zien, maar in de doeiets() functie dus niet...

ik snap het ff helemaal niet meer. misschien dat iemand een idee heeft? :?

[ Voor 0% gewijzigd door ruuds op 31-08-2002 16:12 . Reden: doeiets moest wel in klasse ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

:? doeiets zit helemaal niet in de class lijkt het (wordt iig niet in de namespace gedeclareerd). Daarnaast doe je je aanroepen op de class, en niet op het object.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
mijn fout, ff geedit

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Hmm Nieuw->doeiets() ipv bla->doiets(). In elk geval compiled die code niet, maar als je het aanpast zodat het wel compiled, dan werkt het hier gewoon hoor. Gebruik gewoon std::string trouwens, veeeel veiliger.

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
Zoijar schreef op 31 augustus 2002 @ 16:14:
...dan werkt het hier gewoon hoor...
dat is juist het rare..... hij schijnt te stoppen bij de spatie... als ik die dus allemaal omzet naar een underscore werkt t wel maar dat moet juist niet

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Debug je programma eens, en zet eens een watch op de variable Tekst.
Wat staat er in als je die string (met spaties) erin gekopieerd hebt?

https://fgheysels.github.io/


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
ik heb het gelukkig al gevonden.
later riep ik de functie strtok() over de string aan, die alles dus verkaaide.
Nu roep ik deze functie met een kopie van de string aan en gaat alles goed.
toch bedankt

(het stuk geplaatste code was een voorbeeld van de situatie)

  • Lethalis
  • Registratie: April 2002
  • Niet online
Opmerking: Ik hoop dat je de pointer weer uit het geheugen verwijdert in de destructor.

Ask yourself if you are happy and then you cease to be.


  • Lethalis
  • Registratie: April 2002
  • Niet online
Zoijar schreef op 31 augustus 2002 @ 16:14:
Gebruik gewoon std::string trouwens, veeeel veiliger.
_/-\o_

De STL is sowieso niet voor niets ontworpen :)

Ask yourself if you are happy and then you cease to be.


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
Lethalis schreef op 31 augustus 2002 @ 23:14:
Opmerking: Ik hoop dat je de pointer weer uit het geheugen verwijdert in de destructor.
Uiteraard :)
Lethalis schreef op 31 augustus 2002 @ 23:16:
De STL is sowieso niet voor niets ontworpen :)
Wel eens van gehoord van dat STL maar wat het eigenlijk precies is?
Is STL ook platformonafhankelijk?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

STL staat voor "standard template library" en is onderdeel van de standaard. Dus het is ook platform onafhankelijk. C++ valt grofweg uiteen in 3 delen, de taal zelf, de STL en IOStreams. Dat zijn al die headers zonder .h extensie, zoals string, vector, map, iostream, etc.

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
dus alle compilers bevatten die dingen?

grrrr waarom staat dit niet in mn c++ boek :(

  • wouzer
  • Registratie: Maart 2000
  • Niet online
Nee, niet alle compilers maar de meeste wel. Dus het hoeft ook niet in je boek te staan.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Alle moderne C++ compilers bevatten een library inclusief "de STL", alhoewel de STL tegenwoordig behoorlijk onherkenbaar geintegreerd is. Zo is std::string van origine geen STL component, maar wel standaard C++. Maar omdat alles geintegreerd is werkt std::find() uit de STL op std::string.

Goede boeken behandelen de STL. De STL bestaat al een jaar of 8; tenzij een boek heel oud is moet het er in staan. C++ boeken van 8 jaar oud zijn inmiddels niet meer bruikbaar als leerboek.

De STL is ontwikkeld om platform onafhankelijk te zijn; toen het ontwikkeld werd waren 16 bits DOS applicaties met XMS/EMS gangbaar. Dus dat werkt wel op de systemen van tgenwoordig, die zijn een stuk minder idioot.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
Het boek is trouwens 'Aan de slag met C++ van Gertjan Laan', 3e herziene druk

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Je moet ook niet blind vertrouwen ook dat C++-boek, maar gewoon op de officiële handleidingen die je bij je libc krijgt, daar zitten uitgebreidere beschrijvingen bij.

MSDN:
All of these functions return a pointer to the next token found in strToken. They return NULL when no more tokens are found. Each call modifies strToken by substituting a NULL character for each delimiter that is encountered.
En het ging over strtok(), wcstok(), _mbstok() en _tcstok().

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
offtopic:
he erik alles kitz?

tis al opgelost, kheb een kopietje van die string gebruikt in de functie
Pagina: 1