access violation in einem mallocierten bereich
-
hallo.
ein weiteres problem das mich quält:
#define BFFRSZE 468 int main(int argc, char *argv[]) { ... int snt, ln, bffrsze; char *p_snd_bffr; bffrsze = BFFRSZE; p_snd_bffr = calloc(1, bffrsze); rdin(p_snd_bffr, "stdports.des", bffrsze); ... free(p_snd_bffr); ... } //rdin liest daten aus fle und schreibt sie in einen reservierten //speicherberich auf den *bffr verweist void rdin(char *bffr, char *fle, int bffr_sze) { FILE *fp; int rd, i = 0; int c; if ((fp = fopen(fle, "r")) == NULL) printf("can't open file %s correctly\n", fle); else { printf("opened %s successfully\n", fle); while (i < bffr_sze) { if ((c = getc(fp)) == EOF) break; *(bffr+i) = c; // hier gibts eine access violation i++; } bffr[i+1] = '\0'; rd = i; i = 0; while (i <= rd) { c = bffr[i]; printf("%c", c); i++; } } }
dieser codeausschnitt allokiert ein puffer, in das rdin schreiben soll. der compiler meldet mir in der zeile, in der ich mit *(bffr+i) = c ein char zuweise eine access violation - wisst ihr warum? ich dereferenziere doch richtig.. oder nicht? naja, bin wieder kurz vorm wahnsinn vielleicht (hoffentlich) kann mir jemand helfen
Guss
caspar
-
ich habe den fehler.
c ist ein int und bffr ist ein pointer auf char. kann ja nicht gut gehen. ich dachte bloss eben c als int, da in den manpages steht, dass putc oder getc ein int zurueckliefern... allerdings steht da auch, dass sie den wert anschliessend in einen char zurueckwandeln.
trotzdem noch eine frage. das ist eine wichtige stelle im programm. sind irgndwelche unsicherheiten oder moegliche fehlerquellen im auslesen der datei und ins schreiben des puffers sichtbar. waere fatal wenn ich etwas in der abbruchbedingung nicht bedenken wuerde.Gruss
caspar