Hallo,
ich hab hier ein kleines Problem und ich komm einfach nicht drauf wieso es nicht hinhaun will. Ich hab hier nur meinen Teil des Programms. Ich muss von einem struct den Inhalt in ein File schreiben wobei ich einen header und footer habe der unverändert ist. Nur der content wird von mir verändert. Ich weiß die Bezeichnungen stimmen noch nicht ganz es ist auch nur ein erster Entwurf.
Nun zu meinem Problem ich bekomme immer diese Fehlermeldung
Diese Fehler bekomme ich aber nur wenn ich den Teil zum speichern mit rein nehme wenn ich mir nur den String ausgeben lasse gibts kein Problem.
Hoffentlich könnt ihr mir dabei helfen mfg
ich hab hier ein kleines Problem und ich komm einfach nicht drauf wieso es nicht hinhaun will. Ich hab hier nur meinen Teil des Programms. Ich muss von einem struct den Inhalt in ein File schreiben wobei ich einen header und footer habe der unverändert ist. Nur der content wird von mir verändert. Ich weiß die Bezeichnungen stimmen noch nicht ganz es ist auch nur ein erster Entwurf.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CONTLENGHT 161
struct eintrag
{
unsigned int ID;
double lat;
double log;
unsigned int contentlength;
char *name;
char *description;
};
char *readlist()
{
//testcase
struct eintrag test[2];
test[0].name = "Stadt";
test[0].description = "Das hier ist eine Stadt";
test[0].lat = 154;
test[0].log = 60;
test[0].contentlength = 28;
test[1].name = "Ort";
test[1].description = "Das hier ist ein Ort";
test[1].lat = 125;
test[1].log = 88;
test[1].contentlength = 25;
//-----------------------------------------------------------------------------
int i;
int anzahl = 2;
int contlen = 0;
for (i = 0; i < anzahl; i++)
{
contlen = contlen + CONTLENGHT + test[i].contentlength;
}
char *cont = malloc(contlen * sizeof(char));
for (i = 0; i < anzahl; i++)
{
char *buffer = malloc(0);
sprintf(buffer, " <Placemark>\n <name>%s</name>\n <description>"
"%s</description>\n <Point>\n <coordinates>"
"%f,%f,0</coordinates>\n </Point>\n </Placemark>\n",
test[i].name, test[i].description, test[i].log, test[i].lat);
strcat(cont,buffer);
buffer = malloc(0);
}
return cont;
}
int test(char *content)
{
char *header;
char *footer;
header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n<Document>\n";
footer = "</Document>\n</kml>\n";
FILE *fp;
fp = fopen ("file.kml", "w");
fprintf(fp, "%s%s%s" , header, content, footer);
fclose(fp);
return 0;
}
int main()
{
char *x = readlist();
test(x);
printf("\nData Stored!!!!!! \n\n %s", x);
return 0;
}
Nun zu meinem Problem ich bekomme immer diese Fehlermeldung
Code:
*** glibc detected *** ./ex3: free(): invalid next size (normal): 0x087f61c8 ***
======= Backtrace: =========
/lib/libc.so.6[0x5c25a5]
/lib/libc.so.6(cfree+0x59)[0x5c29e9]
/lib/libc.so.6(fclose+0x136)[0x5b0c96]
./ex3[0x8048673]
./ex3[0x8048698]
/lib/libc.so.6(__libc_start_main+0xdc)[0x56ee9c]
./ex3[0x8048421]
======= Memory map: ========
0053a000-00555000 r-xp 00000000 68:01 4669464 /lib/ld-2.5.so
00555000-00556000 r-xp 0001a000 68:01 4669464 /lib/ld-2.5.so
00556000-00557000 rwxp 0001b000 68:01 4669464 /lib/ld-2.5.so
00559000-006ac000 r-xp 00000000 68:01 4669465 /lib/libc-2.5.so
006ac000-006ae000 r-xp 00152000 68:01 4669465 /lib/libc-2.5.so
006ae000-006af000 rwxp 00154000 68:01 4669465 /lib/libc-2.5.so
006af000-006b2000 rwxp 006af000 00:00 0
0096c000-00977000 r-xp 00000000 68:01 2298234 /lib/libgcc_s-4.1.2-20080825.so.1
00977000-00978000 rwxp 0000a000 68:01 2298234 /lib/libgcc_s-4.1.2-20080825.so.1
00ad2000-00ad3000 r-xp 00ad2000 00:00 0 [vdso]
08048000-08049000 r-xp 00000000 68:11 1897403060 /home/e/eisner06/ESP/ex3/ex3
08049000-0804a000 rw-p 00000000 68:11 1897403060 /home/e/eisner06/ESP/ex3/ex3
087f6000-08817000 rw-p 087f6000 00:00 0 [heap]
b7fad000-b7faf000 rw-p b7fad000 00:00 0
bfb59000-bfb6e000 rw-p bffea000 00:00 0 [stack]
Aborted
Diese Fehler bekomme ich aber nur wenn ich den Teil zum speichern mit rein nehme wenn ich mir nur den String ausgeben lasse gibts kein Problem.
Hoffentlich könnt ihr mir dabei helfen mfg