Array über Struktur füllen



  • Hallo ich habe folgende Strctur die auf ein Array zugreift, dieses Array soll dann über eine Methode gefüllt werden, hier der Code bis jetzt:

    Das Problem ist sobald ich dem Array über den Pointer das digit zuweisen möchte erklärt er mir das er auf den Speicher an dieser Stelle nicht zugreifen kann, wieso?

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct vector NUMBER;
    
    NUMBER *create_number();
    
    void *add_digit(NUMBER *number, int digit);
    
    struct vector
    {
        int *ptr;
        int count;
    
    };
    
    void *add_digit(NUMBER *number, int digit)
    {
    
        if (number->count == 0)
        {
    
            number->ptr = digit;
            number->count = 1;
    
        }
    }
    
    NUMBER *create_number()
    {
    
        /* dynamischen Speicher f�r die Struktur allokieren */
        NUMBER *p_vector =
                (NUMBER *) malloc(sizeof (NUMBER));
    
        /* Komponenten der Struktur initialisieren */
        p_vector->ptr = NULL;
        p_vector->count = 0;
    
        return p_vector;
    }
    
    /*
     * 
     */
    int main(int argc, char** argv)
    {
    
        int zahl[4];
    
        NUMBER *neuerVector;
    
        neuerVector = create_number();
    
        neuerVector->ptr = zahl;
    
        add_digit(neuerVector, 5);
    
        printf("%d", zahl[0]);
    
        return (EXIT_SUCCESS);
    }
    

  • Mod

    In Zeile 24 weist du einem Pointer einen int zu, bist du sicher, dass du das willst?

    add_digit gibt bei dir einen void* zurück, soll aber wohl void zurückgeben.

    Überhaupt ist mir nicht klar, was das ganze werden soll, du hantierst wild und ziellos mit Pointern hin und her. Das add_digit macht sehr sehr sicher überhaupt nicht das was du willst.

    Ungültige Zugriffe an sich sollten in deinem Beispiel jedoch nicht vorkommen. Erst wenn du deine Strukturen weiter verwendest wirst du Probleme bekommen. Kannst du deinen Fehler näher beschreiben?



  • Das ganze war mal eine Klausuraufgabe, also erfüllt keinen sinnvollen Zweck, mein Problem ist jetzt wie du schon sagst die Zeile 24, hier soll in das Array auf das der Pointer zeigt und welches ihm vorher zugewiesen wurde der Wert der in digits steht geschrieben werden. Nur so wie es jetzt ist bekomme ich die Meldung "Cannot access memory at address ..."

    edit: so gehts:

    *number->ptr = digits;
    


  • Naja, Du allokierst kein Speicher für ein int...Dein "CreateNumber()" sollte so aussehen:

    NUMBER *create_number()
    {
    
        /* dynamischen Speicher f�r die Struktur allokieren */
        NUMBER *p_vector =
                (NUMBER *) malloc(sizeof (NUMBER));
    
        /*Hier wird der Speicher für das int allokiert ;-)*/
        p_vector->ptr = (int*)malloc(sizeof(int));
    
        /* Komponenten der Struktur initialisieren */
        p_vector->ptr = NULL;
        p_vector->count = 0;
    
        return p_vector;
    }
    

    und dann:

    void *add_digit(NUMBER *number, int digit) 
    { 
    
        if (number->count == 0) 
        { 
            /* zu beachten: der Zugriff über * */
            *number->ptr = digit; 
            number->count = 1; 
    
        } 
    }
    

    und dann funzt's...



  • Exhumed schrieb:

    NUMBER *create_number()
    {
        /* dynamischen Speicher für die Struktur allokieren */
        NUMBER *p_vector =
                (NUMBER *) malloc(sizeof (NUMBER));
    
        /*Hier wird der Speicher für das int allokiert ;-)*/
        p_vector->ptr = (int*)malloc(sizeof(int));
    
        /* Komponenten der Struktur initialisieren */
        p_vector->ptr = NULL;
        p_vector->count = 0;
    
        return p_vector;
    }
    

    Wer C nicht beherrscht sollte besser keine Hilfestellungen geben.


Log in to reply