Pointer auf struct = Seg. fault ?



  • Hi,
    kann es sein, dass der gcc probleme hat mit structs die als Elemente pointer auf funktionen haben ?

    // befindet sich in blubb.h
    typedef struct someType{
    int (*ptr1) (struct someType*, char *);
    int (*ptr2) (struct someType*);
    } someType;
    
    // main.c
    #include "blubb.h"
    
    // so gehts ohne seg. fault
    someType Item; 
    Item.ptr1= &func1;
    Item.ptr2= &func2;
    
    // so kommt ein seg vault
    someType *Item; 
    Item->ptr1= &func1;
    Item->ptr2= &func2;
    

    oder hab ich da irgendwo nen andren Fehler ?



  • Nein, Probleme hat der gcc damit nicht, nur du hast keine Speicher fuer
    'Item' reserviert.

    mfg
    v R



  • hm, allerdings mit dem Dev-C++ unter win kann ichs ohne Probleme compilen und laufen lassen.
    Und von extra Speicher-Reservierung steht in meinem buch auch nix 😮



  • test_user schrieb:

    hm, allerdings mit dem Dev-C++ unter win kann ichs ohne Probleme compilen und laufen lassen.
    Und von extra Speicher-Reservierung steht in meinem buch auch nix 😮

    Deine Item-Variable ist aber lediglich ein Zeiger und der hat auf einem
    32-Bit System eine groesse von 4Byte. Um auf die Struktur zugreifen zu koennen,
    musst du fuer diese entsprechend Speicher reservieren und spaeter wieder
    freigeben:

    someType *Item = (someType*)malloc(sizeof(someType));
    
      if(Item) //speicherreservierung erfolgreich?
      {
        Item->ptr1= &func1;
        Item->ptr2= &func2;
      }
    
      //...weitere anweisungen...
      //irgendwann speicher wieder freigeben
      free(Item);
    

    mfg
    v R



  • test_user schrieb:

    hm, allerdings mit dem Dev-C++ unter win kann ichs ohne Probleme compilen und laufen lassen.

    Zufall. Das ist der Stoff, aus dem unerklärliche Abstürze gemacht sind 🙂

    Und von extra Speicher-Reservierung steht in meinem buch auch nix 😮

    Dann schmeiß es weg. Oder verbrenn es. Oder wisch dir damit den ***** ab. Oder lies es einfach nochmal genauer, sowas steht in jedem Buch 😉



  • Dev-C++

    Der benutzt übrigens auch nur den GCC.....


Anmelden zum Antworten