Hallo,
danke für den Tipp, aber selbst MetaData m1 = malloc(sizeof(struct metadata)); führt zu den selben Programmabbrüchen.
Wie gesagt, scheint mir der Code insgesamt recht unübersichtlich,
vor allem wegen den verschachtelten Typdefinitionen
metadata und MetaData. Als Alternative würde ich
mal folgenden Code in den Raum stellen (der Einfachheit
halber alles in ein File, d. h. ohne Headerfiles):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 25
struct metadata {
char *bezeichnung;
char *zusatzinfo;
};
void set_str(char **c, const char *s) {
int len = strlen(s);
if (len>MAX) len=MAX;
*c = realloc(*c, (len+1)*sizeof(char));
if(!*c) { puts("Kein Speicher mehr(?!)\n"); exit(1); }
strncpy(*c, s, len);
}
void set_bez(struct metadata *m, const char *s) { set_str(&m->bezeichnung, s); }
void set_zus(struct metadata *m, const char *s) { set_str(&m->zusatzinfo, s); }
void kill_metadata(struct metadata *m) {
free(m->bezeichnung);
free(m->zusatzinfo);
}
int main(void) {
struct metadata m = {NULL, NULL};
set_bez(&m, "Erste Zeile");
set_zus(&m, "Die zweite Zeile ist viel zu lang");
printf("m.bezeichnung = %s\n"
"m.zusatzinfo = %s\n", m.bezeichnung, m.zusatzinfo);
kill_metadata(&m);
return 0;
}
Das sollte in etwa das tun, was ich aus Deinem Code
herauszulesen glaube...
MfG
Andreas