Help, ethernet and SD, error ÿ

this one to show the free ram

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

And for last the one responsible for the hole Ethernet connection

//Serial.println(freeRam());
  char clientline[BUFSIZ];// cria avariável para armazenar os dados enviados pelo cliente ethernet
  int index = 0;// Auxilia no armazenamento dos dados enviados pelo cliente ethernet
  EthernetClient client = server.available();// cria o objeto cliente, como sendo disponível
  
  if (client) {
   
boolean currentLineIsBlank = true;// checa se a linha é vazia, opções do HTTP/HTML

index = 0; // Zera a variável index, que anda no vetor clientline para sempre pegar. 

 while (client.connected())// Enquanto cliente conectado
    {
    if (client.available())// Se o cliente estiver disponível
    {
      char c = client.read();// Lê caracter por caracter do request do cliente
      if(c != '\n' && c != '\r') // verifica se o caracter é \n ou \r, se nao for significa que tem dados a ler, se for pode pular fora do loop
      {
      clientline[index] = c;// armazena cada caracter que o cliente manda em um buffer para criar a string
      index++;
      
      if (index >= BUFSIZ) // Se o index ultrapassar o tamanho do BUFSIZ faz index = BUFSIZ e descarta o resto dos dados
         index = BUFSIZ - 1;
       
       continue;
      }
      clientline[index] = 0;//faz o último caracter do vetor clientline nulo, para o programa reconhecer que o vetor acaba ali
      
      Serial.println(clientline);// imprime na serial oque o cliente solicitou, para debug
      
      if (strstr(clientline, "GET / ") != 0) // Procura na  string que o cliente enviou o comando GET / se achar:
      {
      client.println(F("HTTP/1.1 200 OK"));// Envia menssagens padrão de conecção aceita e OK
      client.println(F("Content-Type: text/html"));
      client.println();
      client.print(F("<center>"));
      client.println(F("<h1>Hospital e Maternidade Santa Clara<h1>"));// Imprime na página a frase centrada
      client.print(F("</center>"));
      client.print(F("<center>"));
      client.println(F("<h1>Controle de dejetos Infectantes<h1>"));// Imprime na página a frase centrada
      client.print(F("</center>"));
      client.print(F("<center>"));
      client.println(F("<h1>Arquivos no SD: <h1>"));// Imprime na página a frase centrada
      client.print(F("</center>"));
      
      root = SD.open("/");// DEfine a variável root como sendo a entrada root do cartão

      printDirectory(root, 0, client);// chama a função que escaneia todo o SD procurando todos os arquivo e os imprime na tela do client já como links    
      }
      
      else if (strstr(clientline, "GET /") != 0)// caso encontre a GET / sem espaço depois significa que estará solicitando algum arquivo, 
      {
       char *filename;
       
       filename = clientline + 5;// então salvamos essa solicitação de arquivo em outra variável com um pequeno truque para pegar o nome do arquivo
       
       (strstr(clientline, " HTTP"))[0] = 0; // Então anulamos a substring HTTP
       
       Serial.println(filename);// Debug
       
       if(!SD.open(filename))// Se não conseguirmos abrir o arquivo solicitado enviamos uma menssagem padrão de erro
       {
            client.println(F("HTTP/1.1 404 Not Found"));
            client.println(F("Content-Type: text/html"));
            client.println();
            client.println(F("<h2>File Not Found!</h2>"));
            break;
       }
       if(regular_relogio != 2){
        Serial.println(F("Opened!"));// caso contrário enviamos uma menssagem padrão de OK 
 
          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Content-Type: text/plain"));
          client.println();
          
          myFile = SD.open(filename);// Abrimos o arquivo que foi solicitado
          if(!myFile) Serial.println(F("file open failed"));
          
          int8_t c;
          while(myFile.available())
          {
            if(parar_erro == 20)
            {
              Serial.println(F("Erro, o cartão retornou está em loop !"));
            delay(4000);
            break;
            parar_erro == 20
            }
           char buffer_arquivo[20];
           int k = 0;
           
           while(k < 20)
           { 
           
             c = myFile.read();
           
           if(c == -1)
           {
            Serial.println(F("Erro, o cartão retornou -1 !"));
           parar_erro ++;
           break;
           
           }
           buffer_arquivo[k] = char(c);
           k++;
           if(k == 20){
             
            for (int i=0; i < 20; i++)
            {
           client.print(buffer_arquivo[i]);
           Serial.print(buffer_arquivo[i]);
           }
         }
        
        
         //Serial.println((char) c);//Dai imprimimos na tela do cliente e na serial tudo que tem no arquivo
          }}
          myFile.close();// fecha o arquivo do SD que fora aberto 
      }
      if(regular_relogio == 2)
      {
      client.print(F("Equipamento atualmente em uso, ou travado na tela errada! 
 Caso esse erro persista cheque o equipamento"));
      }}
      
      else// Qualquer outra coisa é a menssagem padrão de não encontrado
      {
          client.println(F("HTTP/1.1 404 Not Found"));// Código padrão HTTP para página não encontrada
          client.println(F("Content-Type: text/html"));// Código padrão HTTP, para tipo html de texto
          client.println();// pula uma linha, navegador saber que a parte de códigos, hand_shake, acabou.
          client.println(F("<h2>Arquivo Não Encontrado!</h2>"));// Plota na tela a menssagem de arquivo não encontrado 
      }
      break;
           }
    }
 // Delay para que o cliente tenha tempo para receber os dados 
    delay(1);
    // encerra a conexão
    client.stop();
}

Here are my setup

void setup() //Função setup padrão, roda apenas uma vez, basicamente uma função para configurações 
{
Serial.begin(9600);// Inicializa a comunicação USD na velociade 9600 
lcd.begin(84,48); // Inicializa o display de 84X48 pixels
pinMode(10, OUTPUT);// Pôe o pino dez como saída
digitalWrite(4, LOW);// põe o pino quatro em baixo
  digitalWrite(10,HIGH);// e o dez em alto, para iniciar e configurar o cartão SD
if (!SD.begin(4)) {
    Serial.println(F("Erro na inicializacao do SD"));// Printa na USB-serial caso o SD não seja iniciado
    return;
  }
Serial.println(F("SD iniciado com sucesso"));// caso o SD seja iniciado com sucesso mostra isso no serial-USB


Ethernet.begin(mac, ip); // Inicializa o Ethernet
 server.begin();// Inicializa o servidor
 Serial.print(F("server is at "));// imprime na serial USB o endereço do servidor
 Serial.println(Ethernet.localIP());
}