Forum: Compiler & IDEs Kann keinen String in Strukturelement hineinkopieren.


von Martin (Gast)


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");

von None (Gast)


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.

von Martin (Gast)


Lesenswert?

Danke, natürlich hast du recht. Ich habe darauf vergessen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.