|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
[c]return 0 ignorata!!!
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! Codice:
#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; } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
anche con exit(0) va tutto bene...
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
WFM (tm)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Quote:
![]() ma certo!!!! ![]() ![]() ![]() ![]() mmmmmhhh.... hai postato lettere oscure.... ![]() non è che puoi accendere una candela? lo ho trovato su un paio di mailing list online, ma sono oscure come il tuo post ![]() ciao! |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
WFM = WorksForMe
![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Quote:
![]() 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 ![]() ciao! |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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 ![]() Il tuo problema puzza di una sorta di stack overflow, comuqnue.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Quote:
![]() era questo che volevo sentire!!! ![]() ![]() diciamo che è bello usare la strncpy al posto della strcpy, sempre che poi i numeri che ci sbatti dentro siano del vettore giusto ![]() mi ero impallato a cercare di scoprire perchè la close non mi portava il puntatore a null, al mio stack non ci pensavo più ![]() grazie, ciao! PS: bella sign ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:02.