title: Segmentation Fault - Could not Access Memory, Kern_Invalid_Address
body: <p>Im getting this error, what could this be???</p>
  
  <p>Program received signal EXC_BAD_ACCESS, Could not access memory.
  Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
  0x00007fff86703c00 in strlen ()</p>
  
  <p>I RAN THIS IN GDB and its the first thing that appears. It doesnt even tell me on what Line I can find this error...</p>
  
  <p>On the terminal I get this error: Segmentation Fault</p>
  
  <p>Im positive the error is in the AREA "Funcion Busqueda" Im pasting the whole thing so you can tell me if you spot something else.</p>
  
  <p>I need to find what is the cause for this Segmentation Fault!!! What could it beeeee!?</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;stdlib.h&gt;
  #include&lt;string.h&gt;
  #include "clientes.h"
  
  
  int ordena(LISTA1 *inicio,LISTA1 *aux,LISTA1 *nodo,LISTA1 *aux2);
  int agrega_cliente(LISTA1 *inicio, LISTA1*aux,LISTA1 *nodo,LISTA1 *aux2);
  int busca_cliente(LISTA1 *inicio, LISTA1*aux,LISTA1 *nodo,LISTA1 *aux2,LISTA2    *inicioventas,LISTA2 *auxventas,LISTA2 *nodoventas,LISTA2 *aux2ventas);
  int main(void)
  {
     int menu,pops=0;
  LISTA1 *inicio, *aux,*nodo, *aux2;
  inicio=NULL;
  aux=inicio;
  LISTA2 *inicioventas, *auxventas,*nodoventas, *aux2ventas;
  inicioventas=NULL;
  auxventas=inicioventas;
   system("clear");
    //funcion void carga_datos();
  ordena(inicio,aux,nodo,aux2);
  
    printf("TIENDA DEPARTAMENTAL\n\n\n");
    printf("1. Agregar a un Cliente.\n2. Agregar una venta.\n3. Buscar Cliente. \n4. Borrar Cliente. \n5. Borrar una venta. \n6. Salir.");
    printf("\n\nElige una opcion: "); 
    scanf("%d", &amp;menu);
    switch(menu)
      {
     case 1:
    system("clear");
    printf("opcion1\n");
          agrega_cliente(inicio,aux,nodo,aux2);
  
    break;
     case 2:
    system("clear");
    printf("opcion2\n");
    break;
      case 3:
    system("clear");
    printf("opcion3\n");
  
          busca_cliente(inicio,aux,nodo,aux2,inicioventas, auxventas, nodoventas, aux2ventas);
          puts(aux2-&gt;nombre);
  
     break;
    case 4:
    system("clear");
    printf("opcion4\n");
    break;
     case 5:
    system("clear");
    printf("opcion5\n");
    break;
     case 6:
    system("clear");
    printf("opcion6\n");
    break;
    }
   }
  
  ////////////////////////////////////////FUNCION BUSQUEDA//////////////////////////
   int busca_cliente(LISTA1 *inicio, LISTA1 *aux,LISTA1 *nodo,LISTA1 *aux2,LISTA2     *inicioventas,LISTA2 *auxventas,LISTA2 *nodoventas,LISTA2 *aux2ventas)
   {
  char nombrebusqueda[80];
  int numclienteprueba;
  printf("Dame el nombre del cliente a buscar\n");
  scanf("%s",nombrebusqueda);
  aux2=aux; 
  while(aux2!=NULL)
  { 
      if((strcmp(nombrebusqueda,aux2-&gt;nombre))==0)
      {
          puts(aux2-&gt;nombre);
          ////////Buscamos la venta
          aux2ventas=auxventas; 
          while(aux2ventas!=NULL)
          {
              numclienteprueba=aux2ventas-&gt;num_clienteventas;
              if(numclienteprueba==aux2ventas-&gt;num_clienteventas)
              {
                  printf("Wow");
              }
              aux2ventas=aux2ventas-&gt;sigvent;
          }
          ////////////
      }
      aux2=aux2-&gt;sig;
    }
   }
  
     ////////////////////////////////////////////Funcion Ordena
  
  
  
   int ordena(LISTA1 *inicio, LISTA1*aux,LISTA1 *nodo,LISTA1 *aux2)
   {
  char pruebaman[80],probaman[80];//nombres
  char pruebadireccion[150],probadireccion[150];//direccion
  int pruebanum_cliente,probanum_cliente;//numero de cliente
  aux2=aux;
  strcpy(pruebaman,aux2-&gt;nombre);
  strcpy(pruebadireccion,aux2-&gt;direccion);
  pruebanum_cliente=aux2-&gt;num_cliente;
  aux2=aux2-&gt;ant;
  
  do
   {
  
      strcpy(probaman,aux2-&gt;nombre);
  
      if(pruebaman[0]&lt;probaman[0])
      {
          strcpy(pruebaman,aux2-&gt;nombre);
          strcpy(pruebadireccion,aux2-&gt;direccion);
          pruebanum_cliente=aux2-&gt;num_cliente;
          aux2=aux2-&gt;sig;
          strcpy(aux2-&gt;nombre,probaman); 
          strcpy(aux2-&gt;direccion,probadireccion);
          probanum_cliente=aux2-&gt;num_cliente;    
      }
      strcpy(pruebaman,aux2-&gt;nombre);
      strcpy(pruebadireccion,aux2-&gt;direccion);
      pruebanum_cliente=aux2-&gt;num_cliente;
  
      aux2=aux2-&gt;ant;
  
  
      printf("Ciclo\n\n");
  
    }
    while(aux2!=NULL);
   aux2=aux;
   strcpy(pruebaman,aux2-&gt;nombre);
   aux2=aux2-&gt;ant;
   strcpy(probaman,aux2-&gt;nombre);
   if(pruebaman[0]&lt;probaman[0])
      ordena(inicio,aux,nodo,aux2);
  }
  
  
   ///////////////////
  
    ///////////////////////////////////////////////////////Agrega Cliente
     int agrega_cliente(LISTA1 *inicio, LISTA1*aux,LISTA1 *nodo,LISTA1 *aux2)
   {
  
  FILE *clientes;
  clientes=fopen("clientes.txt", "a+");
  //fseek(clientes, 0L, SEEK_END);
  
  inicio=NULL;
  nodo=malloc(sizeof(LISTA1));
  aux=malloc(sizeof(LISTA1));
  
  if(nodo==NULL)
  {
      printf("No hay memoria\n");
      exit(1);
  }
  printf("NOMBRE: ");
  gets(nodo-&gt;nombre);
  printf("DIRECCION: ");
  gets(nodo-&gt;direccion);
  printf("NUMERO DE CLIENTE: ");
  scanf("%d", &amp;nodo-&gt;num_cliente);
  
  if(inicio==NULL)
  {
      inicio=nodo;
      inicio-&gt;sig=NULL;
      inicio-&gt;ant=NULL;
      aux=inicio;
  }
  else
  {
      aux-&gt;sig =nodo;
      nodo-&gt;ant=aux;
      aux=nodo;
      nodo-&gt;sig=NULL;
  }
  nodo=malloc(sizeof(LISTA1));
  
  aux2=inicio;
  
  while(aux2!=NULL)
     {
      fprintf(clientes, "%s\n", aux2-&gt;nombre);
      fprintf(clientes, "%s\n", aux2-&gt;direccion);
      fprintf(clientes, "%d\n", aux2-&gt;num_cliente);
      puts(aux2-&gt;nombre);
      puts(aux2-&gt;direccion);
      aux2=aux2-&gt;sig;
     }
  
  
  aux2=aux;
  do
    {
      puts(aux2-&gt;nombre);
      aux2=aux2-&gt;ant;
    }
      while(aux2!=NULL);
  fclose(clientes);
  } 
  
  /////////////////////////////////////////////////////
  </code></pre>