Toon posts:

[C++] Pointer scope?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik zit met een klein probleempje, misschien is het een domme vraag. Mijn pointer blijft niet leven nadat ik deze testfuntie heb uitgevoerd, als ik met de debugger kijk wat de inhoud van pcTest is, is deze gewoon NULL. Ik reserveer toch duidelijk geheugen voor de pointer. Ik snap niet waarom dit nou niet kan.

Compiler: MVC++ 6.0, Platform: Windows XP.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

void testPtr(char *myPtr)
{
    myPtr = new char[10];
    strcpy(myPtr, "Hello!");
    cout << myPtr << endl;
}

int main()
{
    char *pcTest = NULL;
    testPtr(pcTest);
    cout << pcTest;
    delete[] pcTest;

    return 0;
}


Alvast bedankt!

Peter.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Het is idd een soort van scope probleem, je sturrt een kopie van de pointer naar de functie, en di verander je (met new) waarna dat kopie vrolijk wordt weg gegooid aan het einde van de functie.
Zo werkt het wel:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

void testPtr(char** myPtr) // let op, dubbele ster
{
    *myPtr = new char[10];
    strcpy(*myPtr, "Hello!");
    cout << *myPtr << endl;
}

int main()
{
    char *pcTest = NULL;
    testPtr(&pcTest);
    cout << pcTest;
    delete[] pcTest;

    return 0;
}


Of, makkelijker:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

void testPtr(char*& myPtr) // by reference
{
    myPtr = new char[10];
    strcpy(myPtr, "Hello!");
    cout << myPtr << endl;
}

int main()
{
    char *pcTest = NULL;
    testPtr(pcTest);
    cout << pcTest;
    delete[] pcTest;

    return 0;
}

[ Voor 28% gewijzigd door Zoijar op 04-03-2006 11:31 ]


Verwijderd

Topicstarter
Ok bedankt, het probleem is opgelost :-).