struct durchsuchen



  • Hallo Leute,

    habe hier ein kleines Problem.

    struct Data{
    	unsigned int id;
    	Data *next;
    }m_data;
    
    bool Userdata::checkExist ( unsigned int id ) {
    
    	struct Data *tmp = m_data;
    
    	while ( tmp != NULL ) {
    		if ( tmp->id == id ) return true;
    		tmp = tmp->next;
    	}
    
    	return false;
    }
    

    wie kann es HIER zu einem Speicherzugriffsfehler kommen? Wo kann hier der fehler sein? für mich sieht das alles in Ordnung aus, aber sobald die Funktion aufgerufen wird ist alles hinne. ( zumindest wenn 3 oder mehr Objekte drin sind. )


  • Mod

    bux schrieb:

    wie kann es HIER zu einem Speicherzugriffsfehler kommen?

    Auf 1000 mögliche Arten. Im Endeffekt wird es aber darauf hinaus laufen, dass ein dereferenzierter Zeiger ungültig ist. Daher ist interessanter, woher die Zeiger ihre Werte bekommen. Oder noch interessanter: Warum programmierst du std::list schlecht nach? Hausaufgabe oder Unwissen?



  • bin von C auf C++ umgestiegen, und keine ahnung wieso, aber ich habe aus versehen list/vector nachgebaut ohne darüber nachzudenken, dass es die gibt - aber jetzt interessiert mich dennoch wie der fehler enstehen kann.

    Wenn der Pointer ungültig ist dann bricht er die schleife ab und es wird auf nichts zugegriffen, und wenn er doch gültig ist dann sollte ja die id dennoch vorhanden sein und kein fehler verursachen.


  • Mod

    bux schrieb:

    Wenn der Pointer ungültig ist dann bricht er die schleife ab und es wird auf nichts zugegriffen, und wenn er doch gültig ist dann sollte ja die id dennoch vorhanden sein und kein fehler verursachen.

    Nö. Wenn der Pointer 0 ist, dann wird die Schleife abgebrochen. Ungültig kann alles mögliche sein. Ein uninitialisierter Zeigerwert, ein Zeiger auf ein freigegebenes Objekt, ein Zeiger hinter ein Array, …

    Wenn du in C++ versuchst, wie in C zu programmieren, dann sind solche Arten von Fehler nun einmal an der Tagesordnung.



  • schade, aber dennoch danke
    bin erlich gesagt nicht schlau aus dem fehler geworden - es sind wirklich alle sachen ordentlich erstellt worden und dürften keine fehler verursachen. naja was solls, arbeite ich halt nun mit vectoren weiter


  • Mod

    es sind wirklich alle sachen ordentlich erstellt worden und dürften keine fehler verursachen

    Na, wer wird hier wohl Recht haben, du oder der Computer? 😉

    Geh doch mal mit dem Debugger durch, warum es kracht. Oder unter Linux ist valgrind optimal um solche Fehler zu finden.



  • Du zeigst nicht den Originalcode, m_data ist hier kein Pointer.



  • bux schrieb:

    aber jetzt interessiert mich dennoch wie der fehler enstehen kann.

    Eine Möglichkeit, der Sache auf den Grund zu gehen, ist die hier; denn keiner, der dir helfen will, kann dir helfen, weil du nur ein paar uninteressante Fetzen deines Programms fehlerhaft abgetippt hast, statt das Problem auf ein kompilierbares Minimalprogramm zu reduzieren und dieses dann hier 1:1 zu zeigen.


Anmelden zum Antworten