[C++] Pointerprobleempje

Pagina: 1
Acties:

  • JGame
  • Registratie: April 2001
  • Laatst online: 22-11-2025
Ik heb het volgende probleem wat ik heb weten te reduceren tot de volgende code:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void PointerTest(OLECHAR **Result)
{
    CString cstrTest = "Testje";
    OLECHAR *TempResult = new OLECHAR();
    TempResult = cstrTest.AllocSysString();
    Result = &TempResult;
}

int main()
{
    void PointerTest(OLECHAR **Result);
    OLECHAR *pszTest = new OLECHAR();
    PointerTest(&pszTest);
    printf("%S", *pszTest);
    return 0;
}


Ik wil graag binnen een functie een waarde toekennen aan een pointer variabele die ik via 'call by reference' meegegeven heb aan deze functie.
Nu was mijn idee om geheugen te alloceren in deze functie en de inhoud van de megegeven pointer variabele te laten verwijzen naar dit geheugenblok.
Als ik echter hierna de inhoud probeer af te drukken, word de waarde (null) afgedrukt.

Ik zal ergens wel iets fout doen, maar ik kom er niet uit. Ik hoop dat er iemand is die de oplossing heeft voor dit probleem.

[ Voor 11% gewijzigd door curry684 op 28-09-2003 12:04 . Reden: En [code] tags zijn ook leuk ]

Programming is like having sex: One little mistake and you have to support it for the rest of your life.


  • Count
  • Registratie: Augustus 2000
  • Laatst online: 10-08-2023
Dit klopt sowieso niet:

code:
1
2
OLECHAR *TempResult = new OLECHAR(); 
TempResult = cstrTest.AllocSysString();


Dubbele assignment zonder delete

Great minds think in parallel gutters.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Volgens mij zoek je dit:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
void PointerTest(OLECHAR **Result) 
{ 
    CString cstrTest = "Testje"; 
    *Result = cstrTest.AllocSysString(); 
} 

int main() 
{ 
    OLECHAR *pszTest; 
    PointerTest(&pszTest); 
    printf("%S", pszTest); 
    return 0; 
}

Daar ik wel heel veel heb moeten corrigeren denk ik dat het handig is als je er even verder op ingaat waarom je bepaalde dingen origineel op een bepaalde manier hebt gedaan en of je snapt waarom die fout waren :)

Professionele website nodig?


  • JGame
  • Registratie: April 2001
  • Laatst online: 22-11-2025
Ja dat zocht ik, bedankt !!!
Ik zie nu idd dat een aantal dingen erg stom waren |:(. Maar het was gisteren laat en ik heb veel zitten uitproberen en dan ontstaat dit soort rommelcode.
Met name dit slaat natuurlijk nergens op:

C++:
1
2
OLECHAR *TempResult = new OLECHAR(); 
TempResult = cstrTest.AllocSysString();


De fout die ik gemaakt heb ligt in de laatste regel van de functie. De waarde moet natuurlijk toegekent worden aan de 'inhoud' van result.
C++:
1
*Result = cstrTest.AllocSysString();

Als ik daaar even eerder op was gekomen dan was deze post helemaal niet nog geweest.
Toch bedankt curyy684 voor het oplossen van deze newbie fout

[ Voor 10% gewijzigd door JGame op 28-09-2003 13:04 ]

Programming is like having sex: One little mistake and you have to support it for the rest of your life.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Ik vind dat by-reference passing ook echt met een reference parameter moet:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
void PointerTest(OLECHAR *&Result)  
{  
    CString cstrTest = "Testje";  
    Result = cstrTest.AllocSysString();  
}

int main()  
{  
    OLECHAR *pszTest;  
    PointerTest(pszTest);  
    printf("%S", pszTest);  
    return 0;  
}

Maar in je oorspronkelijke code zitten zoveel fouten, dat je misschien beter eerst een stapje terug kan doen en eerst goed proberen te begrijpen wat pointers, references, addressen en waarden precies zijn, en wat operators als & en * daar mee te maken hebben.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Soultaker schreef op 28 september 2003 @ 12:48:
Ik vind dat by-reference passing ook echt met een reference parameter moet:
Daar is COM het alleen niet zo mee eens... :/

Op zich geef ik je 100% gelijk, maar COM barst van de double- of triplepointered parameters, en daar pas ik me zelf bij COM-zut ook maar aan aan.

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
Soultaker schreef op 28 September 2003 @ 12:48:
Ik vind dat by-reference passing ook echt met een reference parameter moet.
Mwach, het resultaat is hetzelfde toch ?

Mr Stroustrup vindt dat je iha alleen met een const ref of een pointer parameterzou moeten werken als je niet by value wil / kan doorgeven.

Op zich zit daar ook wel wat in, als je een pointer gebruikt kun je bij de aanroep van de functie goed zien dat er waarschijnlijk wat met die parameter gebeurt.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1