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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.