Probleme beim Schreiben in Variable per Zeiger

void array_erstellen(int*&, int&);
Soweit richtig, aber die Definition
// ARRAY PER ZUFALL ERSTELLEN
void array_erstellen(int *array, int *arraymax){
muß, wie in der Deklaration heißen:
Code:
// ARRAY PER ZUFALL ERSTELLEN
void array_erstellen(int *&array, int &arraymax){ //<-----geändert!
     int lauf = 0;
    int elem_min = 1;
    int elem_max = 50;
    int elem_anzahl = 0;

    randomize();

    //Abfragen wie viele Elemente das Array beinhalten soll
    //Array darf aus Gründen der Rechenzeit nicht mehr als 50 Elemente beinhalten

    cout    << "Wie viele Elemente soll das Array enthalten (1-50)?" << endl;

    do{
        cin >> elem_anzahl;
    }while(elem_anzahl < elem_min && elem_anzahl > elem_max);

    cout  << "elem_anzahl= " << elem_anzahl << endl;

    array = new int[elem_anzahl];     //  <------ Deklarieren von Array

    //Array mit zufälligen Werten zwischen 1 und 100 füllen
    for(lauf=0; lauf<elem_anzahl; lauf++){
        array[lauf]=random(100);
        cout << "array[" << lauf << "] = " << array[lauf] << endl;
    }

    arraymax = sizeof(array)/sizeof(array[0]); // <------- arraymax berechnen <-----geändert!
    cout << "arraymax= " << arraymax << endl;
}
Der Aufruf lautet dann:
Code:
array_erstellen(array, arraymax);          //Array erstellen und Array + Arraygröße zurückgeben
Dann hast Du in 'array' die Adresse des Feldes und in 'arraymax' die Größe.
 
Hi!

Vielen Dank! :D Allerdings bekomme ich als arraymax immernoch immer 1 zurück.
bei der Berechnung wird immer 1/1 geteilt... wieso ist aber sizeof(array) das 10 elemente des typs integer enthält 1?

Hast du auch eine Lösung für mein cin.get(); Problem gefunden? Bzw. eine Idee wo der Fehler liegen könnte?

Gruß Chaos
 
Allerdings bekomme ich als arraymax immernoch immer 1 zurück.
Bei der Speicherreservierung über "new" klappt das mit dem "sizeof"-Operator nicht. Du kannst daher auch einfach schreiben: arraymax = elem_anzahl;

Der Grund für dein cin-Problem liegt wahrscheinlich daran, dass der Eingabepuffer nicht leer ist. Du kannst ihn mit der dieser Zeile leeren:
C++:
cin.ignore( numeric_limits< streamsize >::max(), '\n' );

Gruß
MCoder
 
Zurück