PDA

View Full Version : [c]return 0 ignorata!!!


NA01
08-07-2005, 10:50
vi posto il codice di esempio che ho montato.
l'originale aveva due funzioni per l'inserimento e la ricerca.

il codice funziona perfettamente. però alla fine salta la return 0, fa due passi (in cui non so che esegue, giustamente il gdb vede che li fa, ma non sa dove andarseli a prendere) e genera un segfault.

con una abort invece va tutto bene....
il database dopo la close non viene passato a NULL, forse è quello, ma non so che farci :(

ciao!


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>

typedef struct{
char exePath[100];
int auth;
}ProgData;


int main(){
DB *dbp;
DBT key,data;
u_int32_t flags;
int ret;
ProgData prog;
char path[200] = "uuuu";

strncpy(prog.exePath, "ciaobla",200);


ret = db_create(&dbp,NULL,0);
if(ret != 0){
//errore
}
flags = DB_CREATE;
ret = dbp->open(dbp,NULL,"auth.db",NULL,DB_BTREE,flags,0);
if(ret != 0){
//errore
}
memset(&key,0,sizeof(DBT));
memset(&data,0,sizeof(DBT));
key.data = path;
key.size = 200;
data.data = &prog;
data.size = sizeof(ProgData);
ret = dbp->put(dbp,NULL,&key,&data,0);

path[2] = 'k';
prog.exePath[3] = 'N';
key.data = path;
key.size = 200 ;
data.data = &prog;
data.size = sizeof(ProgData);
ret = dbp->put(dbp,NULL,&key,&data,0);

path[2] = 'u';
key.data = path;
dbp->get(dbp,NULL,&key,&data,0);
fprintf(stderr,"%s",data.data);
path[2] = 'k';
key.data = path;
dbp->get(dbp,NULL,&key,&data,0);
fprintf(stderr,"%s",data.data);

if(dbp != NULL){
dbp->close(dbp,0);
}
return 0;
}

NA01
08-07-2005, 10:55
anche con exit(0) va tutto bene...

ilsensine
08-07-2005, 11:01
WFM (tm)

NA01
08-07-2005, 11:12
WFM (tm)
ah! :doh:
ma certo!!!! :sofico: sicuro!!!! :mc: :D :eek:


mmmmmhhh....
hai postato lettere oscure.... :D
non è che puoi accendere una candela?

lo ho trovato su un paio di mailing list online, ma sono oscure come il tuo post :D

ciao!

ilsensine
08-07-2005, 11:44
WFM = WorksForMe :cool:

NA01
08-07-2005, 11:53
WFM = WorksForMe :cool:
mi basterebbe anche sapere quale è la differenza tra la exit e la return :O
nella speranza che mi aiuti a capire cosa è che non riesce a fare.
quando il debugger dice che non sa cosa sta facendo le mie risorse intellettuali già mediamente scarse finiscono subito :D

ciao!

ilsensine
08-07-2005, 11:56
La exit effettua la chiamata alle eventuali funzioni atexit, se registrate, quindi termina il programma immediatamente tramite la syscall exit.
Cosa fa "return" dentro una funzione dovresti saperlo :cool:

Il tuo problema puzza di una sorta di stack overflow, comuqnue.

NA01
08-07-2005, 12:04
La exit effettua la chiamata alle eventuali funzioni atexit,
Il tuo problema puzza di una sorta di stack overflow, comuqnue.
:fiufiu:
era questo che volevo sentire!!! :smack: :D

diciamo che è bello usare la strncpy al posto della strcpy, sempre che poi i numeri che ci sbatti dentro siano del vettore giusto :cool:
mi ero impallato a cercare di scoprire perchè la close non mi portava il puntatore a null, al mio stack non ci pensavo più :muro:

grazie, ciao!


PS: bella sign :D