Array in Klasse dynamisch erzeugen und einem zuvor übergebenen Zeiger zuordnen
-
Hallo,
ich möchte eine Funktion innerhalb einer Klasse mit folgender Schnittstelle implementieren:
void DimacsGraph::GetPath(int s, int t, int** pathNodes, int* pathLenght) const;Es geht um den dritten Parameter. Es soll ein Array von integern dort hineingeschrieben werden (innerhalb der funktion)
mein ansatz ist folgender (vereinfacht)
void DimacsGraph::GetPath(int s, int t, int** pathNodes, int* pathLenght) const{ int groesse=10; int daten=5 *pathNodes=new int[groesse]; for (int i=0;i<groesse;i++){ *pathNodes[i]=daten; //hier gibts den Segmentation Fault } } int main(){ int** pathNodes = new int*; int* pathLength; DimacsGraph myGraph; myGraph.GetPath(1,1,pathNodes, pathLength); }Mir ist klar, dass offenbar irgendwelche Daten nicht initialisiert sind und somit ein Zeiger auf einen unerlaubten Bereich zeigt was zum Segfault führt.
Aber wie ist die richtige Möglichkeit, so etwas zu erreichen?
Vielen Dank für evtl. Hinweise!
-
int main(){ int* pathNodes; int pathLength; DimacsGraph myGraph; myGraph.GetPath(1,1,&pathNodes, &pathLength); }Schlauer wäre natürlich ein std::vector.
-
@unimatrix:
Der Index-Zugriff hat eine höhere Priorität als die Dereferenzierung, deswegen mußt du in deiner Konstellation Klammern setzen:(*pathNodes)[i]=daten;. Aber wie manni schon sagte, mit einer STL-Containerklasse bist du vermutlich besser bedient.@manni: Dir ist schon klar, daß du damit das Problem nicht löst?
-
CStoll schrieb:
@manni: Dir ist schon klar, daß du damit das Problem nicht löst?
Nein, bis gerade eben nicht

-
hallo und danke für die schnellen antworten. Auf die Priorität hätte ich kommen müssen - jetzt ist es mir klar! Vielen Dank!
Das mit der STL ist mir eh klar, aber das Interface war so festgelegt.