Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eferion

#741
Cita de: patilanz en 28 Febrero 2014, 13:56 PM
Hola yo me refiria a las clases pero una pregunta. Como funciona este codigo:

Código (csharp) [Seleccionar]
int* func( )
{
  int* to_return = (int*)malloc( 2 * sizeof( int ) );

  to_return[ 0 ] = 1;
  to_return[ 1 ] = 2;

  free( to_return );
}


ya que nunca devuelve. Creo que free no devuelve o si?

Saludos

Mil perdones... hice el programa sobre la marcha en un descanso que me tomé... mis dedos no iban por el mismo camino que mis pensamientos.
#742
Te faltan dependencias.

CodeBlocks está configurado de tal forma que es capaz de proporcionar al ejecutable las librerías que necesita para funcionar... cuando tu ejecutas directamente el ejecutable, el programa no es capaz de encontrar esas librerías y entonces termina con error. El efecto de este error es que, simplemente, se cierra.

Cuando tu programa adquiere dependencias, una solución es coger dichas dependencias ( en Windows son DLL ) y copiarlas junto a tu ejecutable.

Posiblemente si ejecutas el programa desde una consola de comandos puedas ver si te lanza algún mensaje de error que te ayude en tu tarea de resolver las dependencias.

En cuanto a conectar mysql con codeblock... no es técnicamente así. CodeBlocks es únicamente un IDE, un entorno de desarrollo... por si mismo no hace nada salvo facilitarte un poco la vida a la hora de programar... tu lo que quieres es usar MySql en tu programa. En cuanto a esta tarea, sin saber lo que has hecho ni con qué librerías trabajas es complicado darte una solución que no sea mirar los tutoriales de MySql que hay en Internet y que explican justamente lo que tú necesitas.

Un saludo.
#743

int* func( )
{
  int* to_return = (int*)malloc( 2 * sizeof( int ) );

  to_return[ 0 ] = 1;
  to_return[ 1 ] = 2;

  free( to_return );
}

void main( );
{
  int* valores = func( );

  printf( "%d %d\n", valores[ 0 ], valores[ 1 ] );
}


Con estructuras queda más elegante


typedef struct
{
  int* valores;
  int numValores;
} Vector;

Vector CrearVector( int numValores )
{
  Vector to_return;
  to_return.numValores = numValores;
  to_return.valores = (int*)calloc( 2 * sizeof( int ) );
  return to_return;
}

void EliminarVector( Vector* vector )
{
  free( vector->valores );
  vector->numValores = 0;
}

Vector func( )
{
  Vector to_return = CrearVector( 2 );

  to_return.valores[ 0 ] = 1;
  to_return.valores[ 1 ] = 2;

  return to_return;
}

void main( )
{
  Vector vector = func( );

  int i;
  for ( i = 0; i < vector.numValores; i++ )
    printf( "%d ", vector.valores[ i ] );
  printf( "\n" );

  EliminarVector( &vector );
}
#744
Cita de: vangodp en 28 Febrero 2014, 09:04 AM
Por que si pongo "algoritmos de enrutamiento" me salen cosas sobre ip, router XDD

Eso es porque las redes no dejan de ser laberintos enormes y conseguir que la información llegue a su destino requiere de la magia de dichos algoritmos.

Dijkstra

Bellman-Ford

A*
#745
deberías mirar teoría de grafos y algoritmos de enrutamiento
#746
mysql_init puede devolver null y no lo estás comprobando. Lo mismo te pasa en otras tantas partes del código...


conn = mysql_init(NULL);
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))



ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJET(ventana), "delete_event")



etiqueta = gtk_label_new( "error");
gtk_container_add (GTK_CONTAINER(ventana), etiqueta);


Siguiendo con los punteros, lo más normal es inicializarlos al principio para detectar problemas. Tú los tienes sin inicializar, pero esto es una sugerencia.


MYSQL *conn;
MYSQL_RES *res;
GtkWidget *ventana;


MYSQL_RES *res creo que tiene un uso incorrecto aquí:


void consulta (MYSQL *conn, MYSQL_RES *res, MYSQL_ROW row)
{
   if (mysql_query(conn, "SELECT * FROM datos"))
      fprintf(stderr, "%s\n", mysql_error(conn));
   res = mysql_use_result(conn);


Básicamente res es un puntero sí... pero dentro si modificas el valor del puntero dentro de consulta ( ojo, me refiero a la dirección de memoria apuntada por res ), necesitas pasar a "consulta" un puntero a puntero.

Pasando un puntero simple puedes modificar el contenido de la memoria apuntada por el puntero... pero no puedes hacer que el puntero apunte a otro sitio, ya que esa información no viaja de vuelta al salir de la función.
#747
Así de primeras veo que tienes un problema en la línea 258, debajo del comentario del if... no estás inicializando el puntero...

Más o menos eso es lo que te podría decir si tuviese acceso a la parte conflictiva del código... pero va a ser que con lo que aportas poco te puedo decir.
#748
Vamos a aclarar conceptos.

Un carácter ocupa 8 bits.... o un byte... esto nos da 256 combinaciones posibles. Un archivo binario simplemente almacena información utilizando el catálogo completo de 256 combinaciones. Es un archivo que no puede ser leído por una persona. Nuestro alfabeto no tiene 256 caracteres... además este formato es dependiente de la máquina.

Un archivo de texto reduce el espectro de caracteres a utilizar, además procura almacenar la información de tal forma que pueda ser leída con más o menos facilidad por cualquiera que lo abra. Normalmente la información almacenada en estos archivos es independiente de la máquina que los genere.

Un archivo de texto no deja de ser, por tanto, un archivo binario que utiliza un espectro reducido de caracteres para ser más legible... por tanto no hay una conversión directa entre un archivo binario y uno de texto.

Un ejecutable no es sino un conjunto de instrucciones interpretables por la máquina y sistema operativo correspondientes. Esta información es dependiente tanto de la máquina como del sistema operativo.

Como es de entender no hay una relación clara de conversión entre los 3 formatos.

Me da la sensación de que no tienes muy claro qué es lo que quieres conseguir.
#749
No he entendido tu pregunta.

En general cada contenedor está preparado para un uso más o menos concreto:

* vector: uso general. Respeta el orden de inserción y permite el acceso aleatorio.

* set: cuando no se admiten duplicados, los resultados aparecen ordenados.

* multiset: resultados ordenados y con duplicados

* map: el índice es un tipo diferente de int o los índices no son consecutivos. No admite índices duplicados

* multimap: map con índices duplicados.

* stack y queue: pilas

* list: vector implementado a base de listas enlazadas. Los tiempos de inserción son constantes

* array: vector de tamaño fijo, no puede crecer.
#750
Programación C/C++ / Re: Ayuda con programa en c
25 Febrero 2014, 14:36 PM
usa un bucle for


for( i=0; i<10; i++)
{
  // Codigo a repetir aqui
}