Verrückter Fehler unter Ubuntu mit C::B



  • Moin moin,
    ich bin Student und noch am lernen, also bitte nicht über den unvollständigen, unschönen Code meckern, ich gebe alles 😉
    Meine Programmierumgebung ist Codeblocks 16.01 auf Ubuntu 16.04 LTS mit dem Standardmäßigen GNU GCC compiler.

    Der im Nachfolgenden dokumentierte Fehler passiert genauso auf meinem Lapttop.
    Auf dem eines Kommilitonen, der Win10 und auch C::B nutzt, passiert der Fehler nicht.
    Auch mit einem in Wine emulierten Orwell DevCpp funktioniert alles wie es soll.

    Also hier der Code:

    #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
    
        typedef struct bla
            {
                int zahl;
                char buchstabe;
                struct bla *next;
    
            } lauf;
    
        int main(void)
        {
            int i=0;
            lauf *pstart=NULL,*p=NULL,*ptemp=NULL;
    
            for(i=0; i<3; i++)
            {
    
                ptemp=p;
                p=(lauf*)malloc(sizeof(lauf));
    
                p->zahl=(i+97);
                p->buchstabe=(i+97);
                if(i!=0)
                {
                    ptemp->next=p;
                }
                else
                {
                    pstart=p;
                }
                printf("\nBuchstabe: %c\tZahl: %d\n",p->buchstabe,p->zahl);
    
            }
            p->next=NULL;
    
            printf("\n\n\n");
    
            p=pstart;
            while(p->next!=NULL)
            {
                printf("\nBuchstabe: %c\tZahl: %d",p->buchstabe,p->zahl);
                p=p->next;
                if(p->next==NULL)
                {
                    printf("\nBuchstabe: %c\tZahl: %d",p->buchstabe,p->zahl);
                }
            }
    
            p=pstart;
            for(i=0;i<7;i++){
                p=p->next;
    
                printf("\n\nDurchlauf nr %d",i+1); //LOOK HERE
            }
    
            return 0;
        }
    

    Der Segmentationfault ist NICHT der Fehler den ich meine, das liegt daran das der Zeiger dann irgendwann auf nichts mehr zeigt, sondern das sich die Ausgabe total verändert, wenn ich die \n\n im printf wegnehme, was ja eigentlich null Einfluss auf das Ergebnis haben sollte.

    Wenn ich jetzt die Zeile

    printf("\n\nDurchlauf nr %d",i+1); //LOOK HERE
    

    mit

    printf("Durchlauf nr %d",i+1); //LOOK HERE
    

    ersetze, bricht er schon in der IF-Anweisung davor ab!

    Ich poste Links von Bildern um zu verdeutlichen was ich meine.
    Ebenso poste ich ein Bild von dem was DevCpp ausspuckt und (mMn) richtig sein sollte.

    [IMG]http://www2.pic-upload.de/thumb/30719241/asusual.png

    [IMG]http://www2.pic-upload.de/thumb/30719240/weirderror.png

    [IMG]http://www2.pic-upload.de/thumb/30719277/devcppjpeg.jpg

    Hoffe ich bin im richtigen Sub-Forum und ihr könnt mir helfen :>

    Flap


  • Mod

    flap schrieb:

    Hoffe ich bin im richtigen Sub-Forum und ihr könnt mir helfen :>

    Womit? Das Programm hat undefiniertes Verhalten und der Compiler darf folglich damit machen, was er will.



  • ja ok, natürlich darf die letzte for schleife nicht größer sein als die erste, bin immer wieder erstaunt, wie sehr ein wenig abstand beim programmieren hilft das große ganze zu sehen.

    nichts desto trotz finde ich es verrückt, dass die \n\n einen unterschied auf die ausgabe gemacht haben, kannst du mir das nahelegen und vorallem warum das unter windows mit gleicher IDE und compiler keinen unterschied macht?

    edit: also insbesondere warum er dann schon in der if-anweisung abschmiert, in der doch eigentlich noch alles chico ist oder nicht?

    Liebe Grüße



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum Linux/Unix in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply