[C con Clase] otro error mysql

duna.montero en ldasistencia.com duna.montero en ldasistencia.com
Jue Jun 28 13:29:56 CEST 2007







Hola.

>Si te funciona bien con un array y no con un puntero, entonces esto
confirmaría las sospechas que no creaste memoria dinámicamente para
'titulo', cuando era un >puntero.

Eso me ha alegrado mucho, pero ahora lo que me da miedo es lo del int, que
eso ya no es un puntero.

>Nuevamente, comprueba que los punteros que usas no sean nulos y que
contengan direcciones de memoria a bloques previamente creados con
'malloc()'. Escribe lo >siguiente:
>
>if( NULL == consulta3 )
>  fputs( "ERROR: consulta3 es nulo", stderr );
>else if( NULL == row )
>  fputs( "ERROR: row es nulo", stderr );
>else if( NULL == row[k] )
>  fputs( "ERROR: row[k] es nulo", stderr );
>else
>  consulta3->cl = atoi( row[k] );

Probado, y sigue dándome NULL consulta3...

>Recuerda que sólo tienes que liberar los punteros que tú mismo creaste con
'malloc()' u otra función alternativa.

Hecho también, soy una buena alumna.

>Aunque el hecho de no liberar la memoria dinámicamente, cuando deberías
haberlo hecho, es un error, no debería darte un mensaje de error en tiempo
de ejecución.

Esto no sé, era por si quedaban restos en el puntero o algo y por eso
generaba basura.

Y te mando el código final, si te parece, pero de la parte en la que me da
error.
A ver, la estructura:
struct dos_l
{
        int cl;
        char* titulo;
        int ce;
        struct dos_l * next;

};

Y la función:

dos_l* consulta_bdos_1 (char * recibida)
{
        int i, j, l, k;
        MYSQL_RES *res3;
        MYSQL_ROW row;
        unsigned long *lon;
        MYSQL * base;

        dos_l *consulta3, *primero, *anterior;

        printf ("\nllego a consultar bases\n");

        base = new MYSQL;

        mysql_init(base);

                if(!(base = mysql_init(0)))
                {
                        // Imposible crear el objeto myData


                }
                else
                        printf ("La conexion se ha hecho bien \n");



                if(!mysql_real_connect(base, NULL, NULL, NULL, "dos",
MYSQL_PORT, NULL, 0))
                {

                        printf ("Imposible conectar con servidor mysql en
el puerto %d", MYSQL_PORT);
                        mysql_close(base);

                //        return 1;
                }

                else
                        printf ("La conexión a la base de datos se ha hecho
OK\n");

                if(mysql_select_db(base, "dos"))
                {
                        // Error al seleccionar base de datos.
                        printf ("ERROR: %s",mysql_error(base));
                        mysql_close (base);
                        rewind(stdin);
                        getchar();
                //        return 2;
                }
                // Hacer una consulta con el comando "SELECT * FROM gente":
                 if(mysql_query(base, recibida))
                 {
                        // Error al realizar la consulta:
                        printf( "ERROR: %s\n",mysql_error(base));
                        mysql_close(base);
                        rewind(stdin);
                        getchar();

                }



                 if((res3 = mysql_store_result(base)))
                 {
                        i = (int) mysql_num_rows(res3);
                        j = (int) mysql_num_fields(res3);

                        printf ("\nEl número de resultados es: %d\n", i);

                        if (i!=0)
                        {
                                l=1;

                                primero=NULL;
                                anterior=NULL;

                                for(l = 0; l < i; l++)
                                {
                                        consulta3 = (dos_l *)malloc (sizeof
(dos_l));

                                        row = mysql_fetch_row(res3);
                                        lon = mysql_fetch_lengths(res3);

                                        printf ( "Registro no. %d", l+1);
                                        // Mostrar cada campo y su
longitud:

                                        k=0;

                                        if( consulta3==NULL )
                                         fputs( "ERROR: consulta3 es nulo",
stderr );
                                       else if( row ==NULL )
                                         fputs( "ERROR: row es nulo",
stderr );
                                       else if(row[k] ==NULL )
                                         fputs( "ERROR: row[k] es nulo",
stderr );

                                       else
                                        consulta3->cl = atoi (row[k]);
                                        printf ("\n%d", consulta3->cl);
                                        printf (" ");
                                        k++;


                                        consulta3->titulo = row[k];
                                        printf ("\n%s", consulta3->titulo);
                                        printf (" ");
                                        k++;

                                        consulta3->ce = atoi (row[k]);
                                        printf ("\n%d", consulta3->ce);
                                        printf (" ");

                                        consulta3->next=NULL;

                                        if (primero == NULL)
                                                primero=consulta3;

                                        else
                                                anterior->next=consulta3;

                                        anterior=consulta3;

                                }
                        }


                 }
                 if (i != 0)
                 {
                        consulta3->next=NULL;
                        consulta3=primero;
                 }

                 if (i==0)
                 {
                         consulta3=NULL;
                 }
                 //mysql_free_result(res3);
                 mysql_close(base);
                 return (consulta3);

}


>Espero que podamos solucionar el problema, antes de que "te dé algo".

Parece que me conoces hace años...jejeje
Gracias por todo.








Más información sobre la lista de distribución Cconclase