Array und Größe erst zur Laufzeit bekannt



  • Mister Wing schrieb:

    Das geht aber nicht?

    "Geht nicht" geht garnicht. Ohne die Fehlermeldung des Compilers kann dir nur in seltenen Fällen geholfen werden 😉



  • meine kristallkugel geht auch grad nicht...



  • Du könntest calloc() nutzen, was nicht wirklich super und außerdem C ist. Ansonsten solltest du wirklich auf die die vector-Klasse der STL zurückgreifen.



  • Berufspenner schrieb:

    Du könntest calloc() nutzen, was nicht wirklich super und außerdem C ist. Ansonsten solltest du wirklich auf die die vector-Klasse der STL zurückgreifen.

    der OP ist doch bereits selbst auf new[] gekommen - warum schlägst du jetzt calloc vor?

    @Mister Wing: delete[] nicht vergessen ... würde dir allerdings auch std::vector empfehlen 😉



  • Also wie ich bereits sagte, die Funktion erwartet ein Array. Wenn sie ein Vektor erwarten würde, hätte ich das hier auch nicht posten brauchen. 😡

    Das Array hier, hat exakt 9 Elemente.

    float arr[] = {0.0, 0.0, 0.0,
                   10.0, 0.0, 0.0};
    

    Dieses Array hier würde ich zwar mit 9 Elementen füllen, tatsächlich wär es aber mit meine neun Elementen und der Rest irgendwelche Zahlen die im Speicher stehen gefüllt.

    float *arr = new float[10000];
    

    Das Array muss aber exakt soviele Elemente enthalten, wie ich im mit lenArr angebe.



  • Hä?

    Was genau geht an deinem Beispiel nicht?

    Du erstellst ein dynamisches Array mit lenArr nicht initialisierten Werten. Und dann füllst du das Array mit korrekten Daten auf und übergibst es. Wo ist da bitte das Problem?



  • Mister Wing schrieb:

    Also wie ich bereits sagte, die Funktion erwartet ein Array. Wenn sie ein Vektor erwarten würde, hätte ich das hier auch nicht posten brauchen. 😡

    Dir ist bewusst das ein Vector auch an Funktionen die Arrays erwarten übergeben werden kann?

    void foo(float *array, unsigned int arraySize);
    
    //...
    
    vector<float> values;
    values.push_back(0.0);
    values.push_back(0.0);
    values.push_back(10.0);
    foo(&values[0], values.size());
    // Mögliche Übergabeformen:
    //  &values[0]
    //  &*values.begin()
    //  &values.front()
    

    Beschrieben u.a. im Buch "C++ Coding Standards" (Addison Wesley; Herb Sutter, Andrei Alexandrescu; Thema: 78 Use vector (and string::c_str) to exchange data with non-C++ APIs)

    cu André



  • values.data() geht aber auch, anstatt &values[0] .



  • @asc: Ey super, Cool. Danke dir. Hast mir echt weitergeholfen. 👍 👍 👍 👍 👍 👍 👍 👍 👍 👍



  • Bulli schrieb:

    values.data() geht aber auch, anstatt &values[0] .

    Was? Seit wann hat ein std::vector denn eine Methode namens data() ?


Anmelden zum Antworten