Invalid Null Pointer mit VS2008



  • Und statt malloc/free new/delete verwenden. 😉



  • Santus schrieb:

    ...Ich möchte gerne beim Programmieren verstehen, was ein Pointer wirklich ist und tut....

    Dann würde ich Dir vorschlagen, auch eine Aufgabe zu wählen, bei der es um Zeiger geht (z.B. Liste selbst programmieren) und nicht eine Aufgabe, die man viel schneller, besser, sicherer, ... mit Standardmitteln lösen kann.
    Du würdest doch auch nicht Autofußball spielen, wenn Du begreifen willst, wie man Scheibenwischer bedient, oder ? 😉

    "Zeiger" hat übigens verschiedene Aspekte, die man gut (=besser) einzeln lernt:
    - "Verweislogik" (geht aber in bestimmten Grenzen mit Referenzen)
    - Zeigerarithmetik (üblicherweise in Arrays; kann man aber auch prima mit Iteratoren lernen)
    - dynamische Speicherverwaltung
    - virtual-Polymorphie (geht auch gut mit Referenzen)

    Mach einfach zu jedem eine kleine Übung, dann lernst Du mehr dabei, als wenn Du durch den 1000ten Versuch stolperst, std::string neu zu erfinden....

    Gruß,

    Simon2.



  • Santus schrieb:

    P.S.: Warum ist void main() kein c/c++?? Das steht so auch massig in meinem Lehrbuch.

    Hem, dann ist das Buch entweder veraltet oder schlecht. Beides nicht gerade gut, um vernünftig C++ zu lernen. Wäre vielleicht ein aktuelles und gutes Buch nötig...


  • Administrator

    Santus schrieb:

    P.S.: Warum ist void main() kein c/c++?? Das steht so auch massig in meinem Lehrbuch.

    Hat darauf noch niemand reagiert? Hey, ihr Helfer, helft dem armen Kerl doch! Dann mach ich es halt:
    SCHMEISS DAS LEHRBUCH SOFORT IN DEN MÜLLEIMER!!!

    😃

    Seit 10 Jahren besteht der Standard und seither ist ganz klar, dass void main kein gültiges C++ ist. Wenn dein Lehrbuch sowas also massig einsetzt, dann kannst du ziemlich davon ausgehen, dass du auch sonst kein gültiges C++ lernst! Wahrscheinlich auch noch Dinge wie iostream.h und solchen Unsinn.

    Gute Lehrbücher für aktuelles C++ sind wohl die folgenden Zwei:

    • Thinking in C++ 1&2 (auch als gratis PDF verfügbar)
    • C++ Primer

    Grüssli



  • Hat darauf noch niemand reagiert? Hey, ihr Helfer, helft dem armen Kerl doch!

    Mist. Wusste doch, dass ich noch was sagen wollte. 🙂 (Ne, im ernst. War wirklich auch das erste, was ich gedacht habe, aber nicht das erste, was ich geschrieben habe.. ;))



  • Aber das er offensichtlich ein schlechtes Buch verwendet, erklärt auch, weshalb er mit Pointern anfängt. 😉



  • Hi noch was:

    Santus schrieb:

    char* str;
    str = (char*) malloc(sizeof([b]char*[/b])*256);
    

    Ist falsch, weil "char*" ein Pointer is und der hat afaik unter einem 32Bit System IMMER 4Byte groß ist.
    Also würdest du 4256 = 1024Byte anfordern was du denk ich mal nicht willst oder?
    Also einfach den '
    ' weglassen ;).

    Grüßli Pingu



  • Pingu-Group schrieb:

    Also würdest du 4*256 = 1024Byte anfordern was du denk ich mal nicht willst oder?

    Es ist immernoch leichter unter C++ new/delete zu verwenden, auch von der reinen Handhabung her 😉



  • Bücherkenner schrieb:

    Santus schrieb:

    P.S.: Warum ist void main() kein c/c++?? Das steht so auch massig in meinem Lehrbuch.

    Interessant ist auch, dass Visual Studio

    void main(void)
    

    nicht anmeckert. g++ unter Linux tut das durchaus und fordert in der Funktion main ein return für die int Rückgabe ein. Dort könnte man einem Anfänger (nur dem?) auch den Compilerschlater -pedantic empfehlen um auf reines ISO C++ zu prüfen. Gibt es etwas vergleichbares für Visual C++?

    Gruß,
    Bitshift



  • BitShift schrieb:

    Interessant ist auch, dass Visual Studio

    void main(void)
    

    nicht anmeckert... Gibt es etwas vergleichbares für Visual C++?

    Zumindestens wenn man die Warnstufe auf 4 eingestellt, und die "Language Extensions" deaktiviert, bekommt man dann auch unter VC++ eine Warnung

    warning C4326: return type of 'main' should be 'int' instead of 'void'
    

    cu André



  • asc schrieb:

    Zumindestens wenn man die Warnstufe auf 4 eingestellt, und die "Language Extensions" deaktiviert, bekommt man dann auch unter VC++ eine Warnung

    Aber wehe dir, wenn deine Datei mit einem //-Kommentar endet.. 🙂



  • drakon schrieb:

    Aber wehe dir, wenn deine Datei mit einem //-Kommentar endet.. 🙂

    Da (soviel ich weiß auch im Standard stehend), die letzte Zeile eine Leerzeile sein muss, ist das uninteressant 😉



  • asc schrieb:

    die letzte Zeile eine Leerzeile sein muss, ist das uninteressant 😉

    Muss sie nicht. Es muss nur das letzte Zeichen ein newline sein...



  • asc schrieb:

    Da (soviel ich weiß auch im Standard stehend), die letzte Zeile eine Leerzeile sein muss, ist das uninteressant 😉

    <nitpick>
    Im Standard steht, dass eine Zeile eine von \n abgeschlossene Einheit ist. Demnach muss ein Quellfile keine Leerzeile am Ende enthalten, sondern es muss lediglich die letzte Zeile durch \n abgeschlossen sein. Dass das wie eine Leerzeile aussieht, ist ein Problem der Editoren.
    </nitpick>



  • BitShift schrieb:

    Dort könnte man einem Anfänger (nur dem?) auch den Compilerschlater -pedantic empfehlen um auf reines ISO C++ zu prüfen. Gibt es etwas vergleichbares für Visual C++?

    Nicht nur dem Anfänger. Wer portablen Code produzieren will sollte auch als Fortgeschrittener oder Profi hin und wieder auf -pedantic zurückgreifen und die entsprechenden Meldungen eliminieren. Was -pedantic bei VC angeht: Ich bezweifle dass es das dort gibt. Mit seinen diversen Eigenheiten wie den bereits genannten Language Extensions und deliberatem Nicht-implementieren von Standard-Features (alternative tokens wie and, or, etc., exception pecifications, ...) dürfte es für VC schwierig sein, auf extreme Standardkonformität zu pochen. "-pedantic: use another compiler." 😉



  • pumuckl schrieb:

    Was -pedantic bei VC angeht: Ich bezweifle dass es das dort gibt...

    Unter diesen "Language Extensions" sind alle VC-Spezifischen Dinge (wie auch and, or...) zusammengefasst. Ich gehe mal davon aus das dies dem -pedantic bei anderen Compilern sehr nahe kommt.



  • Wo kann man die Language Extensions bei VC++ ein- oder ausschalten? Ich hab das nirgends gesehen...



  • Nexus schrieb:

    Wo kann man die Language Extensions bei VC++ ein- oder ausschalten? Ich hab das nirgends gesehen...

    Ich habe hier gerade den deutschen VC2008, daher englische Angabe geschätzt:

    Projekteigenschaften, C/C++ / Sprache, Spracherweiterungen deaktivieren
    Properties, C/C++ / Language, Language Extensions

    cu André



  • Vielen Dank. Hehe, als erstes erhielt ich Fehler wegen dem fehlenden Newline am Ende der Datei. 😉

    Gibt es bei VC++ eigentlich eine Möglichkeit, die Standard-Projekteinstellungen zu verändern, sodass man diese bei neuen Projekten gleich nutzen kann? Wäre noch praktisch, auch wegen Warn-Level 4.


Anmelden zum Antworten