Run-Time Check Failure #2 - Stack around the variable 'xyz' was corrupted



  • Einen Grund nicht. Ich wusste es nicht besser aber ich werde es probieren. Müssen alle char durch std::sring ersetzt werden?

    Übrigens bin ich derselbe wie Stormrider13000



  • char char_string[max_size];
    ->
    std::string std_string;
    
    strcpy(char_string, "foo");
    ->
    std_string = "foo";
    
    if (strcmp(char_string, "foo") == 0)...
    ->
    if (std_string == "foo")...
    

    Also ganz intutiv behandeln, wie ints auch.
    Dazu noch Abfragen der Größe, find(), erase(), etc.
    Genaueres hier: http://en.cppreference.com/w/cpp/string/basic_string



  • Also ist mein Fehler, der, dass ich meine chars in strings umwandeln muss?



  • Nein, dein Fehler ist, dass du auf Zeichen zugreifen willst, die gar nicht mehr zu deinem String gehören.
    Mit std::string kann sowas nicht passieren.



  • Nathan schrieb:

    strncpy(szName, N, strlen(szName)+1);
    szName[strlen(szName)] = '\0';
    

    Wenn man sich zu lange mit std::string beschäftigt, wird man etwas nachlässig im Umgang mit char[] , was? 😉



  • Viiieeeelen Dank!!! Ich habe deinen Hinweis mit den Strings gemacht und nun klappts!
    Nochmals vielen Dank!



  • Furble Wurble schrieb:

    Nathan schrieb:

    strncpy(szName, N, strlen(szName)+1);
    szName[strlen(szName)] = '\0';
    

    Wenn man sich zu lange mit std::string beschäftigt, wird man etwas nachlässig im Umgang mit char[] , was? 😉

    Ähm, offenbar.
    Ich weiß noch nicht einmal, was du meinst. 😃



  • Nathan schrieb:

    Furble Wurble schrieb:

    Nathan schrieb:

    strncpy(szName, N, strlen(szName)+1);
    szName[strlen(szName)] = '\0';
    

    Wenn man sich zu lange mit std::string beschäftigt, wird man etwas nachlässig im Umgang mit char[] , was? 😉

    Ähm, offenbar.
    Ich weiß noch nicht einmal, was du meinst. 😃

    strncpy() darf eigentlich nur sizeof(szName)-1 Zeichen kopieren. strlen() geht schlecht, da szName ja u.U. noch nicht einmal nullterminiert ist.
    Und der Nullterminator muss an das Ende des kopierten Strings - auch da geht strlen() nicht, da man den Nullterminator ja gerade erst einfügt.
    Wahrscheinlich verbocke ich es jetzt auch, aber ich würde es vielleicht so machen:

    const size_t len = strlen(N) < sizeof(szName)-1 ? strlen(N) : sizeof(szName)-1;
    strncpy(szName, N, len);
    szName[len] = '\0';
    


  • Mit strings habe ich jetzt aber das Problem, das ich in meinem Fall z.B. keine Doppelnamen ohne Bindestrich speichern kann, da strings ja keine Leerzeichen speichern können. Gibt es dafür auch eine Lösung?



  • Natürlich können strings Leerzeichen speichern!

    std::string str = "Dies ist ein String mit Leerzeichen,\n Zeilenumbruechen,\t und Tabs";
    


  • Auch wenn ich einen String über die Konsole eingebe? Weil ich das Programm ausgeführt habe und dann einen String mit Leerzeichen für VN in der Funktion Student::setAll() eingegeben habe und garnicht mehr den String für N eingeben konnte.



  • std::getline



  • Danke 😉 Klappt jetzt



  • Storm13000 schrieb:

    Edit:
    Vieles diesen Inhalts habe ich Flame Dev's Youtube Tutorials nachempfunden.

    Zumindest die Std...-Header-Datei und die sache mit dem CreateStudent.Create()

    Du solltest dir besser ein vernünftiges Buch zulegen und daraus lernen. Es gibt im Forum eine FAQ dazu, schau´ mal rein.
    Wenn du deinen Code so geschrieben hast, wie es im Videotutorial erklärt wurde, dann lernst du nichts ordentliches. Der Code ist übelst gruselig...



  • Ok, ich habe mir bereits C++ von A bis Z von sowieso Wolf von Galileo Computing bestellt. Müsste die Tage ankommen.



  • Storm13000 schrieb:

    Ok, ich habe mir bereits C++ von A bis Z von sowieso Wolf von Galileo Computing bestellt. Müsste die Tage ankommen.

    Du hast aber auch ein Händchen für sowas? Bitte gleich zurückschicken. Das Buch taugt absolut nichts.


  • Mod

    Storm13000 schrieb:

    Ok, ich habe mir bereits C++ von A bis Z von sowieso Wolf von Galileo Computing bestellt. Müsste die Tage ankommen.

    Dann bestell es ab oder schick es sofort zurück. Das Buch gilt als aktiv hinderlich beim C++-Lernen.

    edit: Auf die Sekunde gleich schnell und trotzdem sieht es wieder so aus, als ob ich zu langsam wäre 🙂 .



  • Storm13000 schrieb:

    Ok, ich habe mir bereits C++ von A bis Z von sowieso Wolf von Galileo Computing bestellt. Müsste die Tage ankommen.

    😮 Da hast einen Griff ins Klo gelandet, schick es wieder zurück, wenn ankommt, am Besten sagst dem Postler er soll es gleich wieder mitnehmen ;).



  • Au ja, alles was irgendwie "C++ von A bis Z" heißt hat schon ziemlich schlechte Karten ein gutes Buch zu sein... Es gibt aber ja extra einen Thread der verschiedene wohl mehr oder weniger gute Bücher vorstellt.

    Ich will wirklich nicht pingelig "rüber kommen", aber für die Zukunft:
    Es ist für die Anderen leichter deinen Code zu lesen, wenn du den Code in "Code-Tags" setzt.

    mfg



  • Was würdest du mir denn empfehlen?


Anmelden zum Antworten