-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: speicher resevierungsproblem in c

  1. #1
    Gast

    speicher resevierungsproblem in c

    hallo ich offe mir kann jemand helfen ich kann icn den fogenden progamm
    kein speicher resevieren für meine tabbelle von datentyp student
    es soll die methode den speicher reservieren
    ich weis nicht mehr warum da nicht klappt compiler sagt immer

    teste.c(26) : warning C4013: 'malloc' undefiniert; Annahme: extern mit Rueckgabetyp int

    erlich gesagt weis ich micht was er meint der compiler


    #include<stdio.h>
    typedef struct stud{
    char vorname[20];
    char name[20];
    int matnr;
    float note[3];
    } STUDENT;

    typedef struct tabelle{
    int max;
    int anzahl;
    STUDENT *tab;
    }TABELLE;


    void init_tap(TABELLE *pt,int max){
    pt->max = anzahl;
    pt->anzahl = 0;
    pt->tab = (STUDENT *) malloc(anzahl*sizeof(STUDENT));

    }
    int main(){

    TABELLE *t1=NULL;


    init_tap(t1,5);




    }

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Fehlt offenbar irgendeine Include-datei.
    Schau mal mit "SEARCH for TEXT" eine Suche nach "malloc" in dem Directory, wo sich auch stdio.h steht.
    Zumindest bei mir (VC+++++, entenschei...Edition) gibst ein
    #include <malloc.h>
    vielleicht hilft's ja mfg robert

  3. #3
    Gast
    ja danke erst mal aber daran hat es auch nicht gelegen es wird immer noch kein speicher reserviert

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    52
    Beiträge
    409
    Du brauchst den stdlib-header.

    #include <stdlib.h>

    HTH und Viele Grüße
    Jörg

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Sehr seltsam, diese Fehlerkombination.
    Was kriegst du denn vom malloc zurück ? -1 ? oder 0 ?
    (ev. printf einbauen)
    Schau im Help nach. Vielleicht braucht die Schweinebacke irgendeine Heap-Initialisierung. mfg robert

    Hopperla: im malloc(anzahl * sizeof(xx)) fehl mir das pt->

    soll so ausschauen malloc(pt->anzahl * sizeof.....)

    wenn anzahl = 0, weil er gar nicht "deine" anzahl in der structure nimmt.
    kriegst du natürlich auch nix (---> printf von pt->anzahl zu Kontrolle)

  6. #6
    Gast
    hi leider ist das auch nicht der fehler
    wenn ich in der main nur mal für meine variable TABELLE *t1
    ein speicherplatz resevieren will macht er das auch nicht
    ich bekomme immer den fehler speicherplatz 0x00000000 write konnte nicht durchgefürt werden ??????????????????
    allerdings weiß ich auch nicht was ein heap ist?

    t1->tab = (STUDENT *) malloc(sizeof(STUDENT));

  7. #7
    Gast
    achso malloc gibt mir wenn ich es mit printf ausgebe
    printf(" malloc ist:%d \n",(STUDENT *) malloc(sizeof(STUDENT)));
    auf im test eine adresse ungleich null aus zb"0.x0040108e" aus
    sagt aber immer noch fehler adr. "0.x0040108e" verweist auf speichplatz
    "0x00000000 "write konnte nicht durchgefürt werden

  8. #8
    Gast
    Schau, mal, da dampft es ein bißchen:
    wenn du init_tap anspringst mit der Adresse von TABELLE, ist diese Adresse NULL (TABELLE *t1=NULL)
    Der malloc will nun sein ergebnis dorthin schreiben (nach pt->tab) und das ist im Nirwana.

    SCHREIBE folgendes (übergenau für meschuggene Compiler)


    void init_tap(TABELLE *pt,int max)
    {
    pt->max = max;
    pt->anzahl = 0;
    pt->tab = (STUDENT *) malloc(pt->max*sizeof(STUDENT));
    }
    int main()
    {
    TABELLE t1; // KEIN * , die Structur ist tatsächlich da

    init_tap((TABELLE *)&t1,5); // &t1 ist die Adresse von tabelle

    ...

    VARIANTE 2:

    int main(){

    TABELLE *t1 = (TABELLE *)malloc(sizeof(TABELLE)); // malloc #1

    init_tap((TABELLE *)t1,5); // malloc #2

    Du wirst sehen, dann klappts auch mit der Nachbarin
    mfg Robert

  9. #9
    Gast
    alles klar es geht auch so das problem war einfach in der methoden def.
    unzwar muss malloc als erstes in der methode stehen weil sonst er versucht auf die variabln zuzugreifen die noch nicht da sind vielen dank hier ihr seid echt fit
    #include<stdio.h>
    #include<malloc.h>
    typedef struct stud{
    char vorname[20];
    char name[20];
    int matnr;
    float note[3];
    } STUDENT;

    typedef struct tabelle{
    int max;
    int anzahl;
    STUDENT *tab;
    }TAB;

    return 0;
    }
    void init_tap(TAB *pt,int max){
    pt = (TAB *)malloc(max*sizeof(TAB));
    pt->max = max;
    pt->anzahl = 0;
    }
    int main(){
    TAB *t3;

    init_tap(t3,5);
    }
    so klapps auch denke der einfachste weg

  10. #10
    Gast
    shit es klappt nur halb die methode reserviert zwar den speicherplatz
    aber sobald sie methode beendet ist und ich wieder in der main()
    bin ist der zugeteilte speicher wieder verloren verstehe ich nicht

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •