Kann keinen String in Strukturelement hineinkopieren.

Gast #3425778
Lesenswert?
• ▲
▼
Das Programm stürzt dauernd ab, ich weiß aber nichr wieso. Keine 
Fehlermeldungen, nichts!!!!! Aber was mache ich falsch?
1
typedef struct entry_s{
2
    char songtitle[20];
3
    char interpreter[20];
4
} entry_t;
5

6
typedef struct heap_s{
7
    entry_t *entries;
8
    long size_s;
9
    long next;
10
} heap_t;
11

12
int main()
13
{
14
    heap_t *meinHeap;
15
    meinHeap = createHeap(4);
16
    strcpy( (*(meinHeap[0].entries)).interpreter, "Martin");
17
    deleteHeap(meinHeap);
18
    return 0;
19
}
20

21
void deleteHeap(heap_t *heap){
22
    free(heap);
23
    if(heap != NULL)
24
        heap = NULL;
25
    printf("Heap erfolgreich freigegeben!");
26
}
27

28
heap_t *createHeap(long size_s){
29
    heap_t *meinHeap;
30
    if( (meinHeap = calloc(size_s, sizeof(heap_t)))  == NULL )
31
       printf("Fehler Beim Alloziieren von Speicher!\n");
32
    else{
33
        printf("Speicher erfolgreich alloziiert!\n");
34
        return meinHeap;
35
    }
36
    return NULL;
37
}

Hier ist wohl der Fehler verborgen, aber ich finde ihn nicht:
1
strcpy( (*(meinHeap[0].entries)).interpreter, "Martin");
Gast #3425790
Lesenswert?
• ▲
▼
Martin schrieb:
> typedef struct heap_s{
>     entry_t *entries;
>     long size_s;
>     long next;
> } heap_t;

Der Struct-Member *entries hat keine Größe, sondern ist nur ein Pointer 
der Struktur entry_t der ins Nichts zeigt.
Musst Du entweder ändern in entries (also das Sternchen weg) oder beim 
malloc
explizit Speicherplatz dafür holen.

So sehe ich das.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.