solucionar solucion signal segmentation received program generado error dumped dev c unix segmentation-fault

solucion - Programa C que causa falla de segmentación



segmentation fault(core dumped) c (5)

"Ejecutando el comando -a prueba -d deimf -i input.txt -l log.txt -u bc @ abc out.txt"

Simplemente te olvidaste de dar la opción -o:

Ejecución del comando -a prueba -d deimf -i entrada.txt -l log.txt -u bc @ abc -o out.txt

Tengo un programa C debajo escrito en UNIX. Estoy recibiendo un error de segmentación. No estoy llegando a donde me estoy perdiendo algo. Alguien puede ayudarme porfavor.

#include <stdio.h> #include <stdlib.h> #include <strings.h> char* app_name = NULL; char* pInFile = NULL; int main(int argc, char *argv[]) { char* arg0 = argv[0]; char* pdebug = "miecf"; char* pLogfile = NULL; char* pUserid = NULL; char* pOutFile = NULL; int c; while( (c = getopt(argc, argv, ":a:d:i:l:u:o")) != EOF) { switch (c) { case ''a'': app_name = optarg; break; case ''d'': pdebug = optarg; break; case ''i'': pInFile = optarg; break; case ''l'': pLogfile = optarg; break; case ''u'': pUserid = optarg; break; case ''o'': pOutFile = optarg; break; default: fprintf( stderr, "unknown option /'%c/'/n", optopt ); break; } /* switch(c) */ } /* while( getopt()) */ printf("app_name is [%s]/n",app_name); printf("pdebug is [%s]/n",pdebug); printf("pInFile is [%s]/n",pInFile); printf("pLogfile is [%s]/n",pLogfile); printf("pUserid is [%s]/n",pUserid); printf("pOutFile is [%s]/n",pOutFile); return 0; }

Ejecutando comando

-a test -d deimf -i input.txt -l log.txt -u bc@abc -o out.txt

Salida

app_name is [test] pdebug is [deimf] pInFile is [input.txt] pLogfile is [log.txt] pUserid is [bc@abc] run[2]: 10448 Segmentation Fault(coredump)

Informe Dbx

program terminated by signal SEGV (no mapping at the fault address) 0xff232370: strlen+0x0050: ld [%o2], %o1 (dbx) where =>[1] strlen(0x0, 0xfffffaf0, 0x0, 0xffbff1a8, 0x0, 0x2b), at 0xff232370 [2] _ndoprnt(0x10f77, 0xffbff26c, 0xffbfe8e9, 0x0, 0x0, 0x0), at 0xff29e4d4 [3] printf(0x10f68, 0x21100, 0x0, 0x2111e, 0xff3303d8, 0x14), at 0xff2a0680 [4] main(0xc, 0xffbff304, 0xffbff4ad, 0xffbff4b8, 0x0, 0xffffffff), at 0x10e8


El problema es que pOutFile es NULL cuando intentas imprimirlo. Muchos SO (libc) no manejan esto y usted está tratando de hacer que imprima una variable que no tiene un valor.

Prueba esto:

if (pOutFile != NULL) printf("pOutFile is [%s]/n",pOutFile); else printf("pOutFile is NULL/n");

Adicional:

pOutFile no tiene un valor incluso cuando especificó el modificador -o porque no puso un: después de la o en la llamada getopt. Específicamente, los: vienen después de la carta. Debería ser esto:

while( (c = getopt(argc, argv, "a:d:i:l:u:o:")) != EOF)


Falta : es el problema:

while( (c = getopt(argc, argv, ":a:d:i:l:u:o:")) != EOF) ^


No pasó -o antes de "out.txt", por lo que está desreferenciando un puntero nulo en la impresiónf de pOutFile. Eso es lo que noté a primera vista.


Parece que está segfaulting en esta línea:

printf("pOutFile is [%s]/n",pOutFile);

A juzgar por su línea de comandos, no está utilizando un pOutFile -o , por lo que pOutFile permanece NULO, pero está tratando de printf .