# C++ this(0x0)



## patklu1988 (26. Sep 2014)

Hi Leute,
ich bin gerade dabei mich nebenbei etwas mit C++ zu beschäftigen.
Dabei stoße ich während ich sonst eigentlich hauptsächlich mit Java programmiert habe auf ganz neue Probleme. 
Mein Code lautet wie folgt:


```
vector <Zahlenpaar> Zahlenpaar::getZahlenpaare(){
    vector <Zahlenpaar> zahlenp;
    long counter=0;
    for(int i=0 ; i<(int)primzahlen.size() ; i++){
        for(int j=0 ; j<=i ; j++){
            unsigned long produkt = primzahlen[i] * primzahlen[j];
            if(produkt == schluesselZahl){
                zahlenp[counter].setZahlEins(primzahlen[i]);
                zahlenp[counter].setZahlZwei(primzahlen[j]);
                counter++;
            }
        }
    }

    return zahlenp;
}
```

Nun ist das Problem was sich beim Debuggen zeigt, liegt innerhalb der beiden set-Methoden, die dem vector jeweils Werte für die Zahlen zuweisen. Eine der Methoden sieht folgender Maßen aus:


```
void Zahlenpaar::setZahlEins(unsigned long z){
    zahlEins = z;
}
```

Nur der Debugger zeigt mir nun an, dass dieser Methode zwei Parameter übergeben werden und zwar zuerst "this(0x0)" und "z=..."

Ich bin nun soweit das dieses "this(0x0)" wohl mit einer Nullpointer Exception gleichzusetzen ist, daher vermute ich das ich den Vektor, beziehungsweise das einzelne Objekt in dem Vektor, nicht korreckt initialisiert habe. Wobei die Initialisierung in C++ ja auch etwas anders läuft als in Java, weil Anweisungen wie zB ".... = new...." gibt es ja nicht. 
Ich habe bereits andere Objekte mit so ziemlich dem gleichen Code initialisiert. Was das Ganze für mich gerade extrem verwirrend macht..... 
http://www.java-forum.org/images/smilies/bahnhof.gif


----------



## patklu1988 (26. Sep 2014)

Update:

Hab es hinbekommen. 

Einfach nachdem der Vektor "zahlenp" initialisiert wird noch eine größe bestimmen, zB (10). Schon klappt es


----------



## Ice (27. Sep 2014)

patklu1988 hat gesagt.:


> Update:
> 
> Hab es hinbekommen.
> 
> Einfach nachdem der Vektor "zahlenp" initialisiert wird noch eine größe bestimmen, zB (10). Schon klappt es



In C/C++ muss man den Speicher selbst allokieren und verwalten. Ich empfehle dir erst mit C anzufangen,
bevor du mit C++ rumspielst. Generell, ist es immer besser erst mit C anzufangen, und die Basics zu lernen,
da man das wissen auf jede andere Programmiersprache anwenden kann.
Programmieren lernen von Anfang an: c:start - proggen.org


----------



## Gucky (27. Sep 2014)

Da muss ich ice widersprechen. C beinhaltet noch viele alte und überholte Konstruktionen, die in C++ besser gelöst worden sind (bspw. durch OOP). Ich habe direkt mit C++ angefangen und bereue es nicht im Geringsten.

Konstrukte wie ... = new... gibt es sehr wohl. Und zwar bei Zeigern. Klasse* test = new Klasse(); Allerdings müssen diese mit delete test; wieder freigegeben werden, da es keine GaarbageCollection in C++ gibt.


----------

