Probleme mit srand()

Dieses Thema im Forum "C/C++" wurde erstellt von betaros, 12.11.2012.

  1. #1 betaros, 12.11.2012
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Moin,

    ich programmiere gerade meinen eigenen Passwortgenerator, einfach nur aus Spaß und um in C++ wieder ein wenig rein zukommen. Jedoch hab ich bereits Probleme bei der Erstellung eines Zufallswertes...

    Mein Codeausschnitt:
    Code:
    void Creater::genAlgorithm(int length, int category){
    	if(category<1 || category>6){
    		category = 6;
    	}
    
    	const string numbers = "1234567890";
    	const string klein   = "abcdefghijklmnopqrstuvwxyzäöü";
    	const string gross   = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ";
    	const string sonder  = ".,-;:_#'*+/()[]{}&%$ۤ!";
    
    	cout << "Generiertes Passwort:     ";
    
    	/*
    	 * temp1 waehlt ein Zeichen aus einer Konstante aus
    	 * temp2 waehlt aus welche Art von Zeichen genutzt wird
    	 * */
    
    	size_t temp;
    	int temp2;
    	srand(time(NULL));
    
    	for(int i; i<length; i++){
    		switch(category){
    		default:
    			return;
    			break;
    		case 1:
    			temp = rand()%10;
    			cout << numbers.at(temp);
    			break;
    		case 2:
    			temp = rand()%29;
    			cout << klein.at(temp);
    			break;
    		case 3:
    			temp = rand()%29;
    			cout << gross.at(temp);
    			break;
    		case 4:
    			break;
    		case 5:
    			break;
    		case 6:
    			break;
    		}
    	}
    }
    Fehler im Debugger bei srand:
    Code:
    No source available for "_dl_vdso_vsym() at 0x39a232dae0" 
    Da mir der Fehler leider gar nix sagt, würde ich mich sehr über Hilfe freuen :D

    Grüße
    betaros
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 tgruene, 13.11.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Der Fehler bedeutet wahrscheinlcih nur, dass die Bibliothek, in der srand() steht, keine debug-Symbole enthaelt und Dir der Debugger deswegen nichts Genaueres sagen kann.
    Ich wuerde einen Zwischenschritt einbauen,
    Code:
    unsigned int myseed = time(NULL); srand (myseed); 
    ,
    dann kannst Du auch den Wert von 'myseed' vorher anschauen. Vielleicht passiert ein Fehler bei der Konvertierung, oder ein Ueberlauf,...
    Kompilierst Du mit '-Wall -O0 -g' (zumindest fuer gcc)?
     
  4. #3 betaros, 13.11.2012
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Ich habe mal den Zwischenschritt so eingebaut, wie du es geschrieben hast. Nun kommt der Fehler beim initialisieren von myseed.
    Code:
    No source available for "_dl_vdso_vsym() at 0x39a232dae0" 
    Meine Includes sind
    Code:
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdio>
    #include <cstdlib>
    Was das kompilieren angeht, kann ich dir das gar nicht beantworten, da ich mit Eclipse CDT programmiere und einfach eine neues Projekt angelegt habe. ?(
     
  5. #4 tgruene, 14.11.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Ein Rechtsklick auf den Projentnamen im "Project Explorer" bringt Dich ueber Properties zu C/C++ Builds -> Settings. Dort kannst Du das ueberpruefen. Es koennte sein, dass an ganz anderer Stelle ein Fehler mit z.B. new/delete stattfindet, der erst an dieser Stelle zu einem Speicherzugriffsfehler fuehrt. In C++ sieht das manchmal merkwuerdig aus und ist schwer zu finden. Du koenntest auch valgrind benutzen, um den Fehler zu finden. Der Code selber ("unsigned int myseed = time(NULL);") kann eigentlich keinen (eigenen) Fehler erzeugen.
     
  6. #5 betaros, 14.11.2012
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Ich kompiliere hiermit:
    Code:
    g++ -O0 -g3 -Wall -c -fmessage-length=0
    main.cpp
    Code:
    #include <iostream>
    #include "creater.h"
    using namespace std;
    
    int main(){
    	cout << "Passwortmanager" << endl;
    
    	Creater c;
    
    	c.menu();
    
    	return 0;
    }
    creater.cpp
    Code:
    #include "creater.h"
    
    int Creater::menu(){
    	cout << "------------------------------" << endl;
    	cout << "1) Generiere Passwort" << endl;
    	cout << "2) Speichere Passwort" << endl;
    	cout << "3) Zeige Passwortliste an" << endl;
    	cin >> Creater::choise;
    
    	switch(Creater::choise){
    	default:
    		cout << "Falsche Eingabe!" << endl;
    		break;
    	case 1:
    		Creater::generator();
    		break;
    	case 2:
    		break;
    	case 3:
    		break;
    	}
    	return 0;
    }
    
    void Creater::generator(){
    	cout << "Laenge des Passwortes: ";
    	cin >> Creater::length;
    
    	cout << "Kategorie:" << endl;
    	cout << "1) 1234567890" << endl;
    	cout << "2) abcdefghijklmnopqrstuvwxyz" << endl;
    	cout << "3) ABCDEFGHIJKLMNOPQRSTUVWXYZ" << endl;
    	cout << "4) blubb123" << endl;
    	cout << "5) BluBB123" << endl;
    	cout << "6) 8(uBb|]3" << endl;
    	cin >> Creater::category;
    
    	Creater::genAlgorithm(Creater::length, Creater::category);
    }
    
    void Creater::genAlgorithm(int length, int category){
    	if(category<1 || category>6){
    		category = 6;
    	}
    
    	const string numbers = "1234567890";
    	const string klein   = "abcdefghijklmnopqrstuvwxyzäöü";
    	const string gross   = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ";
    	const string sonder  = ".,-;:_#'*+/()[]{}&%$ۤ!";
    
    	cout << "Generiertes Passwort:     ";
    
    	/*
    	 * temp1 waehlt ein Zeichen aus einer Konstante aus
    	 * temp2 waehlt aus welche Art von Zeichen genutzt wird
    	 * */
    
    	size_t temp;
    	//int temp2;
    	unsigned int myseed = time(NULL);
    	srand (myseed);
    
    	for(int i; i<length; i++){
    		switch(category){
    		default:
    			return;
    			break;
    		case 1:
    			temp = rand()%10;
    			cout << numbers.at(temp);
    			break;
    		case 2:
    			temp = rand()%29;
    			cout << klein.at(temp);
    			break;
    		case 3:
    			temp = rand()%29;
    			cout << gross.at(temp);
    			break;
    		case 4:
    
    			break;
    		case 5:
    			break;
    		case 6:
    			break;
    		}
    	}
    }
    creater.h
    Code:
    #ifndef CREATER_H_
    #define CREATER_H_
    
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdio>
    #include <cstdlib>
    using namespace std;
    
    class Creater{
    private:
    	int choise;
    	unsigned int length;
    	int category;
    
    public:
    	int menu();
    	void generator();
    	void genAlgorithm(int length, int category);
    };
    
    #endif /* CREATER_H_ */
    Ich hoffe das hilft bei der Suche nach dem Fehler. Ich nutze übrigends Fedora 17 x64.

    Grüsse
    betaros
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 tgruene, 14.11.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Code:
    for(int i; i<length; i++)
    Hier wuerde ich 'int i = 0' initialisieren. Viele Compiler machen das zwar, ich wuerde mich jedoch nicht darauf verlassen. Daran sollte allerdings Dein Fehler nicht liegen. Nachdem ich das eingefuegt hatte, laeuft das Programm auch fehlerfrei durch, sowohl durch gdb als auch durch valgrind. Vielleicht hat Dein Kernel einen Fehler, oder Deine Entwickungsumgebung (gcc), allerdings waere das schon seltsam.
    Wie gesagt, ich wuerde valgrind installieren, und dann "valgrind ./creater" laufen lassen. Die Ausgabe kannst Du ja hier posten, vielleicht findet jemand darin einen Fehler.
     
  9. #7 betaros, 14.11.2012
    betaros

    betaros Computerspezi

    Dabei seit:
    02.02.2008
    Beiträge:
    181
    Zustimmungen:
    0
    Bei mir läuft es jetzt auch. Der Fehler war tatsächlich die for-Schleife.... Komische Sache...

    Vielen Dank für deine Hilfe! :)

    Grüsse
    betaros
     
Thema:

Probleme mit srand()

Die Seite wird geladen...

Probleme mit srand() - Ähnliche Themen

  1. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  2. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  3. Forscher analysieren Durchsatzprobleme im Linux-Scheduler

    Forscher analysieren Durchsatzprobleme im Linux-Scheduler: Eine Gruppe von Forschern hat Fälle identifiziert, in denen der Scheduler im Linux-Kernel falsche Entscheidungen trifft und die CPUs nicht so gut...
  4. München: LiMux als Sündenbock für IT-Probleme?

    München: LiMux als Sündenbock für IT-Probleme?: Im Münchner Stadtrat soll später in diesem Jahr erneut über den Einsatz von Linux in der Stadtverwaltung diskutiert werden. Die Grünen vermuten,...
  5. BSI-Audit findet keine akuten Probleme in OpenSSL

    BSI-Audit findet keine akuten Probleme in OpenSSL: Das Bundesamt für Sicherheit in der Informationstechnik hat OpenSSL auf seine Sicherheit untersuchen lassen. Die Analyse zeigt vor allem, dass die...