Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





q alguien me diga pq me da error este programa, plz

Iniciado por Zeigon, 26 de Diciembre de 2002, 03:19:27 PM

« anterior - próximo »

Zeigon

                                he hecho este programa, q lo q pretende hacer es: te pide un nombre, lo metes y crea con realloc y malloc, una fila nueva y un string en dicha fila del tamaño del nombre introducido. luego pregunta si quieres meter más nombres, si sí, lo de antes, si no, te muestra todos. se ejecuta bien y todo eso, pero cuando meto el primer nombre y luego le doy a que 'si' (o con 'no' tb pasa) para meter otro, me sale un mensajito mu mono q me dice q excepción no controlada y se me pira al debugger, encima a la parte en ensamblador q no tengo NPI, aunq con el modo "normal" tampoco puedo hacer mucho. ya no sé ni q cambiar.



#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int leer_cadenas (char **, int);

void mostrar_cadenas (char **, int);



void main()

{ //linea 10

char **nombres = NULL, seguir[] = "si";

int i = 0;



while (seguir == "si"){



i = leer_cadenas(nombres, i);



fflush(stdin);

//linea 20

puts("nQuieres meter mas nombres? (si / no): ");

gets(seguir);



}

 

mostrar_cadenas (nombres, i);





} //linea 30





//Para leer los nombres que se metan por teclado



int leer_cadenas (char **nombres, int i) {



char cadena[]="";

int tamanio;





  i++;

  //Se reasigna tamaño para todo el array de punteros a cadenas con una fila nueva

  if ((nombres = (char **)realloc(nombres, i * sizeof(char*))) == NULL) {

   puts("n No hay suficiente memoria, No se pudo crear el arrayn");

   getchar();

   exit(-1);

  }



  puts("nPon un nombre: ");

  gets(cadena);

 

  /*Da tamaño a la cadena actual del array, del tamaño del nombre que se ha metido.

  Como un carácter es un byte, con coger el número de caracteres ya se coge

  el número de bytes. El nº de caracteres se coge con 'strlen'.

  Se le añade 1 al tamaño para el carácter NULO, ya que 'strlen' no lo cuenta.*/

  tamanio = strlen(cadena)+1;

  nombres[i-1] = (char *)malloc(tamanio);

  nombres[i-1] = cadena;





return i;

}







//Para mostrar todos los nombres del array



void mostrar_cadenas (char **nombres, int i) {



int aux;

puts("nnNombresn=========================");



for (aux = 0; aux < i; aux++) {

 puts(nombres[aux]);

 puts("n");

}





getchar();



for (aux = 0; aux < i; aux++) {

 free(nombres[aux]);

}



free(nombres);

}





por cierto alguien sabe si se puede poner el nº de línea al código en VC++ 6, pq ya veis mi super contador de líneas  :loco: . y otra cosa: para q el programa espere hasta q pulse una tecla, vamos para q no se cierre, hay alguna forma q no sea poniendo 'getchar()' como hago yo??

gracias. aunq me quedan todavía algunas preguntas las dejo para luego o para otro post  :ojo:                                
eigon
----------------------------------------------
El arca de Noe fue construida por amateurs.
El Titanic por profesionales.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.