Zum Inhalt springen

Klotzkopp

Mitglieder
  • Gesamte Inhalte

    9912
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    3

Alle Inhalte von Klotzkopp

  1. Nein, 4.294.967.296 ist schon richtig. Es wird der maximal darstellbare Wert +1 addiert.
  2. Laut Standard ist die Vorgehensweise ein wenig anders: Wenn der Wert nicht in den Wertebereich passt, wird solange der maximal darstellbare Wert + 1 addiert oder subtrahiert, bis er passt. Bei einem Wert von -100 wird also einmal der maximal mögliche Wert für unsigned int + 1 addiert. Wenn unsigned int 32 Bit groß ist, also 4.294.967.296. Das Ergebnis ist 4.294.967.196, das ist der Wert, den a nach der Initialisierung hat. Diese Zahl hat in croonix' Fall dieselbe binäre Repräsentation wie -100 bei (signed) int, weil sein Compiler negative Zahlen als Zweierkomplement speichert. Das muss aber nicht so sein. Der Standard gibt dem Compilerhersteller da drei Möglichkeiten zur Auswahl, Zweierkomplement ist nur eine davon.
  3. Klotzkopp

    structs

    Weil p ein uninitialisierter Zeiger ist. Speicher hast du für adressen geholt, nicht für p.
  4. Es geht hier nicht darum, Jobvorschläge zu sammeln. Da aber wohl nichts anderes mehr kommt, mache ich den Thread dicht. Bensch10, wenn du noch etwas beitragen möchtest, beispielsweise eigene Überlegungen, dann bitte eine PN an mich.
  5. Klotzkopp

    structs

    Bist du ganz sicher, dass es kein Zeiger auf ein Array von 5 Strukturen sein sollte? Das wäre der übliche Weg.
  6. In der Symbolleiste gibt es eine Combobox namens "Solution Configurations", da kannst du das auswählen. In der Debug-Konfiguration optimiert der Compiler nicht, und im Programm sind zusätzliche Informationen enthalten, um die Fehlersuche (Debugging) zu vereinfachen. In der Release-Konfiguration fehlen diese Hilfsinformationen, und der Compiler versucht, das Programm so klein und schnell wie möglich zu machen. Dafür solltest du einen weiteren Thread aufmachen. Das Board ist themenzentriert, nicht benutzerzentiert. Wenn hier jeder seinen eigenen persönlichen Supportthread hat, in dem wild von einem Thema zum anderen gesprungen wird, findet man nichts mehr wieder.
  7. Bei Fließkommakonstanten benutzt man den Punkt als Dezimaltrennzeichen. Case-Labels müssen compilezeit-konstante integrale Ausdrücke sein. Variablen dürfen da niemals stehen. Ist dir der Unterschied zwischen p und 'p' klar? Das ist ein Folgefehler. Und noch etwas Grundsätzliches: Das funktioniert nicht so, wie du glaubst. Du kannst in Variablen keine Formeln hinterlegen, die dann automatisch berechnet werden, wenn du die anderen Variablen mit Werten befüllst. Diese Zuweisung bewirkt an genau dieser Stelle im Code eine Berechnung, nur steht zu diesem Zeitpunk noch gar nichts sinnvolles in g, b und c drin. Du musst also erst die Eingabewerte haben, dann kannst du rechnen. Dasselbe gilt für alle deine "Formeln".
  8. while (First->next!=NULL || Erstes->next!=NULL) Diese Schleifenbedingung solltest du nochmal prüfen. Gegen Ende ist da nämlich First NULL, und der Zugriff auf First->next damit undefiniert.
  9. Weil die Mutter auch Mutter und Vater hat, und der Vater auch, und deren Eltern auch und deren Eltern auch und deren Eltern auch und deren Eltern auch und deren Eltern auch und deren Eltern auch und deren Eltern auch und deren Eltern auch... Du siehst das Problem? Deine Klasse enthält sich unendlich oft selbst. In Java, wo Klassenmember erst mal nur leere Verweise sind, würde das so gehen, aber in C++ nicht. Da müsstest du Zeiger verwenden, damit diese Rekursion auch mal irgendwann abbrechen kann.
  10. //Löschen des ersten Elements von q1 p = First; First = First->next; p->next = NULL; free(p);[/code] Hier löschst du ein Element aus q1. [code] for (i=1; i<=N-1; i++) { //Einlesen der Zahl aus dem ersten Element von q1 y = (Zeiger)malloc(sizeof(NODE)); y->zahl=First->zahl; y->next = NULL; Letztes ->next =y; Letztes = y; //Löschen des ersten Elements von q1 p = First; First = First->next; p->next = NULL; free(p); } Hier löschst du nochmal N-1 Elemente aus q1. Damit hast du N Elemente gelöscht, genauso viele, wie drin waren. Danach ist q1 LEER, First ist NULL. //Ausgeben & Löschen des letzten Elements p = First; printf("%5i \n",p->zahl); [/code]Und hier knallt's dann, wie erwartet. p ist NULL, weil First NULL ist, der Zugriff auf p->zahl ist undefiniert.
  11. Du hast da ein Logikproblem. Wenn du aus einer Liste mit N Elementen erst eins löschst, und dann noch N-1 weitere, ist die Liste leer. Ein nachfolgendes "Ausgeben & Löschen des letzten Elements" kann dann nur in die Hose gehen, weil es kein letztes Element mehr gibt.
  12. Zeig doch einfach mal den aktuellen Code. Du hast beim zweiten Mal wieder den alten Code hochgeladen.
  13. Nein, sollte man nicht. Es ist unnötig und kann unter bestimmten Umständen Fehler verdecken. Wenn man in C90 (z.B. wegen einer vergessenen Includedirektive) malloc ohne Prototyp benutzt, geht der Compiler davon aus, dass die Funktion int zurückgibt. Das kann z.B. dann problematisch sein, wenn man eine Plattform hat, auf der int und Zeiger nicht gleich groß sind. Wenn man malloc dann ohne Cast benutzt, bekommt man eine Fehlermeldung, weil ein int nicht implizit in einen Zeigertyp umgewandelt werden kann. Benutzt man aber einen Cast, gibt es keine Fehlermeldung mehr, das Problem ist aber immer noch da. Schwer zu behebende Laufzeitfehler können die Folge sein.
  14. Das kann der Compiler gar nicht, weil das ein Laufzeitfehler ist. Das kann allenfalls der Debugger. Das ist derselbe Code wie vorher. Du kannst den Code übrigens auch einfach in [ CODE ]-Tags direkt ins Forum stellen. Dann spart man sich auch das Gehampel mit den Archiven. Aber schon mal ein paar allgemeine Hinweise: Es heißt int main, nicht void main. Den Rückgabewert von malloc soll man nicht casten.
  15. Keine gute Idee. Diese Entwicklungsumgebung wird seit Jahren nicht mehr weiterentwickelt und hat etliche Bugs. Aber wir können das. Dazu ist es aber notwendig, dass du die Fehlermeldungen hier reinstellst. Denn Hellsehen können wir nicht.
  16. Auf den Rechnern, auf denen das Programm laufen soll, muss das Microsoft Visual C++ 2008 Redistributable Package installiert sein, und du musst die Konfiguration auf Release stellen. Alternativ kannst du alle Bibliotheken statisch linken.
  17. Klotzkopp

    structs

    Warum [5]? Damit legst du ein Array von 5 Zeigern an. Das sollte schon nicht funktionieren. speicher ist (durch die fehlerhafte Deklaration) ein Array, und Arrays kann man nichts zuweisen. Wenn du dir nicht hundertprozentig sicher bist, dass du die Fehlermeldung richtig deutest, ist es immer besser, die Fehlermeldung selbst hier reinzustellen, statt deiner Interpretation. Denn auch dabei können schon Fehler unterlaufen. Ich bin ziemlich sicher, dass die Fehlermeldung etwas anderes aussagt. Das grundlegende Problem ist, dass du -> statt . benutzen musst, wenn du über einen Zeiger auf die Strukturelemente zugreifen willst.
  18. Klotzkopp

    C potenzrechnung ?

    Du meinst wahrscheinlich irgendwas^0 = 1.
  19. Klotzkopp

    C potenzrechnung ?

    Je mehr Mühe du dir beim Erstellen deiner Beiträge gibtst, desto besser kann dir geholfen werden. Und warum sollten sich die Helfer mehr Mühe geben als du? Ja, nur geschrieben hast du es nicht. Wir haben anderthalb Stunden damit vertan, rauszufinden, was nun eigentlich das Problem ist. Mach's halt richtig Im Ernst: Mach dir klar (am besten mit Papier und Bleistift), was passiert, wenn deine Funktion beispielsweise mit (4,2) aufgerufen wird. Dann sollte dir sofort auffallen, was das Problem ist.
  20. Klotzkopp

    C potenzrechnung ?

    Bitte was? Vollständige deutsche Sätze erleichtern das Verständnis. Ja, schöne Endlosrekursion. Die Funktion ruft sich selbst immer wieder mit denselben Parametern auf. Wie soll das jemals enden?
  21. Klotzkopp

    C potenzrechnung ?

    Das ist eine völlig unzureichende Fehlerbeschreibung. Willst du die Funktion jetzt selbst schreiben, oder nur die bestehende Funktion der Standardbibliothek benutzen?
  22. Der Code ist unvollständig, foldername ist nirgends deklariert, die Variable ist aber nicht weiter relevant. Das Problem ist, dass das "Zurücksetzen" auf savepath nicht richtig umgesetzt ist. Du verbiegst nämlich nur den Zeiger path auf dein Array savepath. Ab dem zweiten Schleifendurchlauf verweisen die beiden also auf denselben Speicherbereich, und damit hängst du weitere Unterverzeichnisse auch an savepath an, die nachfolgenden Zurücksetzungen bewirken gar nichts mehr. Übrigens solltest du, wenn du denn TCHAR benutzen möchtest, das auch konsequent durchziehen. Momentan ist das ein wilder Mischmasch aus char/strlen/strncat und TCHAR/_tcscpy, der nur bewirkt, dass sich der Code nicht mit Unicode übersetzen lässt. Du solltest auch bedenken, dass du nicht einfach irgendetwas an path dranhängen solltest. Du weißt nicht, wie groß der Puffer ist, den der Aufrufer für den Parameter reserviert hat. Und kannst du mir erklären, warum du hinten einen doppelten Backslash anhängst?
  23. Klotzkopp

    string zählen

    Wenn du bedenkst, dass ein gewöhnliches kleines A bereits den Wert 97 repräsentiert, sollte klar sein, warum das mit einem so kleinen Array nicht passt. Wenn du nur die Buchstaben zählen willst, musst du den Wertebereich vorher auf 0 bis 25 runterrechnen. Und nochmal der Hinweis auf den Wertebereich von char. Dein Code funktioniert nur solange, wie du den ASCII-Bereich nicht verlässt, du also kein Zeichen hast, dass durch eine Wert > 127 repräsentiert wird. Darüber liegende Zeichen ergeben für char mit hoher Wahrscheinlichkeit negative Werte, und dann knallt es wahrscheinlich.
  24. Klotzkopp

    string zählen

    Ja, das wäre möglich. Es gibt da aber einen Stolperstein: Bei den meisten Compilern ist char vorzeichenbehaftet, der Wertebereich geht also von -128 bis +127. Das ist als Arrayindex natürlich nicht so toll. Deswegen sollte man den char in unsigned char umwandeln, bevor man ihn als Index benutzt.
  25. Klotzkopp

    string zählen

    Nein, das ist Quatsch. Du versuchst, eine Beziehung zwischen den Arrayelementen und dem, was sie zählen sollen, herzustellen, aber das ist gar nicht notwendig. In den Arrayelementen sollen doch hinterher die Anzahlen der einzelnen Buchstaben stehen. Für welchen Buchstaben welches Arrayelement steht, brauchst du nicht in irgendwelchen Variablen zu speichern, das ergibt sich schon aus der Position im Array: Das erste Element steht für A usw. Damit sollte auch klar sein, wie du dein Array initialisieren musst. Stell dir einfach vor, was drinstehen soll, wenn du ein Wort eingibst, das keine Buchstaben enthält.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...