Re: sigsegv mit fopen
Andreas Gaupmann <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
Hallo,
On Monday 27 March 2006 11:46, Benjamin Rogge wrote:
> Hallo,
> ich habe ein Programm, dass sich beim Aufruf von fopen immer mit einem
> Speicherzugriffsfehler beendet. Ich kann leider den Fehler nicht finden.
>
> #include <stdlib.h>
> #include <stdio.h>
> #define BUFF_SIZE 256
> /* [...] */
> int main(int argc, char* argv[])
> {
> /* [...] */
> char buffer[BUFF_SIZE];
> /* [...] */
>
> fputs("Enter filename: ",stdout);
> if(fgets(buffer,BUFSIZE-1,stdin)==NULL)
> {
> perror("fgets");
> return -1;
> }
>
> FILE* inputFile;
> if((inputFile = fopen(buffer,"r"))==NULL)
> {
> perror("fopen");
> return -1;
> }
> /* [...] */
> return EXIT_SUCCESS;
> }
>
>
> Mein GDB (Version 5.2.1) sagt mir, dass der Speicherzufriffsfehler von
> chunk_free() ausgelöst wird. chunk_free() wird irgendwann von malloc()
> benutzt, welches dann von fopen() aufgerufen wird.
> Ich kompiliere mit gcc (Version 3.2).
>
> Vielen Dank für eure Hilfe.
>
fgets() speichert auch Zeilenumbrüche (new lines, '\n') in den buffer. Das
sollte entfernt werden bevor fopen() mit dem Inhalt von buffer aufgerufen
wird.
Zum Beispiel:
#include <stdlib.h>
#include <stdio.h>
#define BUFF_SIZE 256
/* [...] */
int main(int argc, char* argv[])
{
/* [...] */
char buffer[BUFF_SIZE];
/* [...] */
fputs("Enter filename: ",stdout);
if(fgets(buffer,BUFF_SIZE-1,stdin)==NULL)
{
perror("fgets");
return -1;
}
buffer[strnlen(buffer, BUFF_SIZE)-1] = '\0';
printf("buffer = <%s>\n", buffer);
FILE* inputFile;
if((inputFile = fopen(buffer,"r"))==NULL)
{
perror("fopen");
return -1;
}
/* [...] */
return EXIT_SUCCESS;
}
Grüße,
Andreas
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
[email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]