000
09.11.2008, 12:40 Uhr
~shinji
Gast
|
Hallo!
Ich habe momentan einen Knoten im Gehirn, weil ich mit meinem kleinen Problem nicht weiter komme. 
Und zwar möchte ich innerhalb der main() eine Methode aufrufen die zweierlei machen soll.
1) Daten in ein Arrray schreiben, wobei ich der Methode den Pointer auf den Speicher übergebe. Nach Beendigung der Methode soll das Array noch im Speicher stehen.
2) Einen Rückgabewert liefern, der die Anzahl der Arrayelemente angibt.
Das alles wird kompliziert dadurch, da ich vor dem Aufruf der Methode nicht die Göße des Arrays kenne. Es handelt sich also um ein dynamisches Array. So ungefähr sieht der (bereinigte, ohne Klassen) Code aus:
| C++: |
int main() { int *daten; int eintraege;
eintraege = getData(daten); printf("%d - %d\n", eintraege, daten[0]); // Ergibt nur Müll bzw. Segmantation Fault free(daten); return 0; }
|
| C++: |
int getData(daten) { int *tmp=NULL // Temporaeres Array int rows; // Anzahl der Daten int i; //Hilfsvariable
rows = getRows();
tmp = new *int[rows];
// Ganz viel Voodoo der das tmp-Array fuellt
for (i=0; i<rows; i++) printf("%d", tmp[i]); // Gibt den richtigen Wert aus - z.B. 100
daten = calloc(rows, sizeof(int)); // Speicher reservieren fuer Rueckgabe memcpy( daten, tmp, rows ); // Array umkopieren
for (i=0; i<rows; i++) printf("%d", daten[i]); // Gibt die Werte aus tmp aus.
return rows; }
|
Sorry wenn ich etwas vergessen habe, aber ich muss den Code gerade aus dem Kopf heraus aufschreiben. Mein Problem ist halt das "daten" außerhalb der Methode nur Müll enthält. So als wäre der Speicher nie reserviert bzw. nie mit Daten gefüllt worden.
Der einzige Lösungsvorschlag den ich bisher dazu gehört hatte war, dass ich doch für "daten" einfach ein Array mit der maximal vorstellbaren Größe fest anlegen soll. Also einfach
int daten[30000];
oder so was. Das finde ich aber ziemlich bescheiden da das Array durchaus auch mal nur einen Eintrag haben kann.
Wo liegt denn mein Denkfehler?
Vielen Dank!
Gruß Thorsten |