PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Zeiger auf Vector gültig?



Bismarck_1
21.08.2010, 17:47
#include <iostream>
#include <vector>
#include <string>
#include <windows.h>

using namespace std;

void Funktion (vector<string>::pointer pZeiger);

int main()
{
vector<string> vTestText;

vTestText.push_back("test1");
vTestText.push_back("test2");
vTestText.push_back("test3");

vector<string>::pointer pZeiger = &vTestText[0];

Funktion(pZeiger);
}

void Funktion (vector<string>::pointer pZeiger)
{
pZeiger += 3;

cout << *pZeiger << endl;

system("PAUSE");

ExitProcess(0);
}
Der Zeiger in der Funktion zeigt auf ein Element das nicht existiert und das Programm stürzt ab. Meine Frage, wie überprüfe ich ob der Zeiger auf ein gültigen Element zeigt?

Bismarck_1
21.08.2010, 17:59
@OpCodez (http://free-hack.com/member.php?u=67508)

Habe den jetzt Text gefixxt.

Ich meine das der Element auf den der Zeiger zeigt auch existiert. Denn in meine Beispiel zeigt der Zeiger auf ein 4. Element obwohl nur 3. existieren

blackberry
21.08.2010, 18:01
Ich wüsste nicht wie man überprüfen kann, ob das Element auf das du zeigst überhaupt existiert, aber du könntest dir merken, wie weit du noch gehen darfst (d.h. einen zweiten Parameter mit der Größe des Vectors übergeben).

#include <iostream>
#include <vector>
#include <string>
// #include <windows.h> // unnötig...

using namespace std;

void Funktion(vector<string>::pointer pZeiger, size_t n);

int main()
{
vector<string> vTestText;

vTestText.push_back("test1");
vTestText.push_back("test2");
vTestText.push_back("test3");

vector<string>::pointer pZeiger = &vTestText[0];

Funktion(pZeiger, vTestText.size());
}

void Funktion(vector<string>::pointer pZeiger, size_t n)
{
while(n--)
{
cout << *pZeiger << endl;
pZeiger++;
}

// system("PAUSE");

// return; // unnötig...
}

krypt0n
21.08.2010, 18:06
Ähm du pushst 3 Einträge, setzt einen Pointer auf den ersten, updatest den Pointer auf das 4. (leere) Element des Vektors - logisch, dass es nicht geht ;)

Oh Frage nicht richtig gelesen, ich verzieh mich dann Mal in meine Gummizelle und schmeiss bisschen was. Tatü.