Ver Mensaje Individual
  #8 (permalink)  
Antiguo 12/07/2013, 15:57
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Asignar numeros a un vector

@L3m0n: "Puedes usar lo de las variables de dimension variable, aunque si mal no recuerdo es solo de C99 así que tendras que decirle eso al compilador."

Y tambien tendras que decirle al tio que te compra la aplicacion que es posible que finalice de forma inesperada debido a una sobrecarga del stack :)) Bueno, hasta donde yo se no es posible en C saber la disponibilidad de memoria para las variables bloqueadas por la propia aplicacion, tal vez haya alguna solucion que desconozco tal como el malloc y el new(nothrow) retornan nulo y puedo checar ese error.


@LydiaH: "¿Así esta bien?"

No es eso a lo que me refiero, sino a comprobar que realmente se pudo bloquear la memoria requerida; si declaras variables de longitud estatica (variables normales para entendernos) la condicion de memoria disponible se comprueba al cargar la aplicacion (no se si lo hara el s.o. o quien sea), saltando una alerta (o algo) indicando que no hubo suficiente memoria para lanzar la aplicacion. En caso que uses VLA (esto de los arrays de longitud variable), la aplicacion inicia correctamente, se pide bloquear x tamaño pero no se sonsigue y se intenta escribir en algun elemento de la memoria no disponible para la aplicacion. En la correccion que hiciste:

Código C:
Ver original
  1. if(!(vector = malloc(dimension*sizeof(int)))) {
  2.     //error, memoria no disponible
  3. }
  4. else {
  5.     //trabajas con el array
  6.     //y lo liberas cuando ya no lo necesitas
  7.     free(vector);
  8.  
  9.     //y si quieres reusarlo asignas nulo
  10.     vector = 0;
  11. }


@LydiaH: "he ejecutado el programa utilizando getchar(); en vez de getch(); y la pantalla de ejecución se cierra inmediatamente una vez muestra el último printf... ¿Qué puede ser?¿Entonces?.... Uso getch(); o getchar(); ?"

'getch' no es estandar y está prototipada en la cabecera conio.h que tampoco es estandar; 'getchar' es estandar y esta prototipada en stdio.h De todas formas el funcionamiento interno es diferente: getch no requiere enter (salto de linea) para leer los datos entrados por teclado, mientras que getchar si. De todas formas ese no es el problema que se te plantea: la funcion 'scanf' lee datos del stdin hasta dar con un salto de linea (la tecla enter con la que dices 'aceptar'), dejando el la cola del stdin un salto de linea en primera posicion, luego cuando llamas al 'getchar()' encuentra enseguida un salto de linea y finaliza la aplicacion. Una solucion es vaciar el buffer de entrada (ojo como muy bien dices sin fflush ya que el comportamiento de esa funcion con el stream de entrada no está definido, es decir en algunos s.o. funciona y en otros no).


@l222p: "ya me dio la logica :)"

Pero estas en C o en C++? Lo de las VLA solo compila en C (C99, y creo haber visto que para compiladores gcc tambien en C++). Lo de malloc/free es de C (tambien funciona en c++ siempre que no haya objetos de por medio); en c++ seria mejor usar new/delete, al igual que cin/cout para leer/escribir; que sentido tendria usar toda la sintaxi de C compilandola como C++?


Saludos
vosk