vector<int> generateRandvector(int S) EXC_BAD_ACCSESS !?!?!



  • Korrektur:

    #include <iostream> 
    #include <vector> 
    #include <cstdlib> 
    using namespace std; 
    
    vector<int> generateRandvector(int S) 
    {    
        vector<int> VEKTOR; 
        int summe = 0; 
        for(int i = 0;summe<=S;i++) 
        {    
            //VEKTOR[i]= rand();  // Vektor ist leer!
    		VEKTOR.push_back(rand());
            summe += VEKTOR[i]; 
        } 
     return VEKTOR ; 
    } 
    
    void print(vector<int> v) 
    {    
        vector<int>::iterator it; 
        //int i; 
        //for (it=v.begin(),i=1; it<v.end(); it++,i++) 
        //{ 
        //    cout << v[i] << endl; Wieso nicht den Iterator benutzen?
        //    
        //} 
    
    	for(it=v.begin(); it != v.end(); it++)
    	{
    		cout << *it << endl;
    	}        
    } 
    
    int main (int argc, char * const argv[]) 
    { 
        int S; 
        vector<int> VEKTORMAIN; 
        cout << "P R A K T I K U M  N U M M E R  6 \a" << endl; 
        cout << "Bitte geben sie eine Zahl ein : "; 
        cin >> S; 
        cout << endl; 
        VEKTORMAIN = generateRandvector(S); 
        cout << "AUFRUF VON PRINT()" << endl; 
        print(VEKTORMAIN); 
    
    	std::cin.get();
    	return 0;    
    }
    


  • Ok und wie löse ich das Problem ?
    Ich kenn die Länge des Vektors ja vor der Generierung noch nicht :-S .
    Per push Methode oder so ?



  • Ok vielen dank ...



  • blergh



  • Hab heute an der Aufgabe weiter gearbeitet ..... und die Funktion generate Rand Vector arbeitet immer noch nicht korrekt es wird immer nur ein Vektor der länge 0 erzeugt egal wie groß mein S ist

    vector<int> generateRandvector(int S)
    {    
        vector<int> VEKTOR;
    	int summe = 0;
    	int i = 0;
    	while (summe < S)
    	{
    
            VEKTOR.push_back(rand());
    		cout << "\n"  << i << " . Element befüllt mit " << VEKTOR[i] << endl;
    		summe +=VEKTOR[i];
    		i++;
        }
    	return VEKTOR ;
    }
    

    Und das hier ist der Funktionsaufruf etc ...

    int main (int argc, char * const argv[]) 
    {
    	vector<int> VEKTORMAIN;
    	int S;
    	cout << "***********P R A K T I K U M  N U M M E R  6 ********\a" << endl;
    	cout << " \nBitte geben sie maximale Quersumme ein : " ;
    	cin >> S;
    	VEKTORMAIN = generateRandvector(S);
    }
    


  • while (summe < S)
    

    Da würde ich nochmals drüber nachdenken.



  • Schreiben Sie eine Funktion std::vector<int> generateRandVector (int S), die
    einen Vektor erzeugt und so lange mit natürlichen Zufallszahlen füllt, bis deren Summe einen (von
    der Kommandozeile eingebbaren Wert) S erreicht oder überschritten hat.
    

    Ist doch aber richtig interpretiert oder nicht :-S

    "Solange die summe < als die Grenze S ist fülle den Vektor mit random Werten."



  • Wenn S>0 ist, dann ist in VEKTOR auch mindestens ein Wert drin.
    Wie überprüfst du die Anzahl der Werte denn?



  • Geh mit dem Debugger durch.



  • Die Anzahl der Werte überprüfe ich mit

    //**************** OPERATOR REDEF'S*******************//
    ostream& operator << (ostream& stream ,vector<int> lhs)
    {	vector<int>::iterator it= lhs.begin();
    	vector<int>::iterator it2 = lhs.end(); 
    
    	while(*it!=*it2)
        {
            stream << *it << endl;
    		it++;
    
        }
    	return stream; 
    
    }
    
    //******************** PRINT ************************//
    void print(vector<int> v)
    {
    
    	cout << v; 
    
    }
    


  • Ach du liebes bisschen...
    Du darfst die Iteratoren in while(*it!=*it2) nicht dereferenzieren.
    Und wenn du deinen vector<int> so übergibst, wird jedesmal eine Kopie erstellt. Deswegen als (konstante) Referenz übergeben: const vector<int>&



  • ja vielen Dank , aber das löst mein Problem leider immer noch nicht :-S !



  • Bacid90210 schrieb:

    ja vielen Dank , aber das löst mein Problem leider immer noch nicht :-S !

    Kannst du ein Debugger benutzen, dann mach es mit den Hintergrund, was Nexus gesagt hat!



  • Bacid90210 schrieb:

    ja vielen Dank , aber das löst mein Problem leider immer noch nicht :-S !

    Äh, rufst du print überhaupt auf?



  • ja ich hab hier die generate Randvec und einen Teil aus der Main gepostet ..
    Wenn ich das ganze mit dem Debugger durchgehe ...kommen ich auch zu keinem Schluss
    Er füllt den Vektor für egal welches S ich einlese nur mit einem Wert und zwar immer dem selben 16807 , und mein S bleibt kontinuierlich auf 0 ...
    Da stimmt doch irgendwas nicht :-S !.... ich bin verwirrt



  • Du musst erst srand aufrufen. Näheres dazu hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html

    Und S kann gar nicht 0 sein, sonst würden dem Vektor keine Elemente hinzugefügt.



  • Und welches S hattest du?



  • Das Argument S ... und doch es kann Null sein weil ich mein Programm umgeschreiben habe undzwar :

    while (summe <= S)
    

    Wenn ich innerhalb der Funktion ein beliebiges S deklariere funktioniert es ..
    Ganz komische Kiste hier



  • Ich hab den fehler 😃

    Ich hab einfach immer viel zu große Werte für das S eingeben .
    Und nun rand %100 ergänzt , jetzt funktioniert alles fein ...

    Danke für eure hilfe .

    sowas doofes kann nur nem Änfänger passieren *schäm*


Anmelden zum Antworten