Domande sul ModuloQuattro (modifica, lettura e ricerca di record)
In questa pagina potete
porre domande sul
ModuloQuattro.
Vi prego di inserire un titolo che chiarisca che tipo di domanda state ponendo.
Parametri nei prototipi delle funzioni
Leggendo i prototipi dell funzioni di questo modulo, nel file LPC_Include.h manca il parametro int
NumValues che invece è presente nelle specifiche. Quindi nel file di include le funzioni
ReadRecord() e
LocateRecord() hanno un parametro in meno rispetto alle specifiche.
Come ci comportiamo??
--
GiuseppeLisanti - 24 May 2006
Conversione di un double da/in Network Byte Order
Come richiestomi dal prof. Sterbini pubblico le costanti che possono risultare utili per realizzare questa funzione in modalità multipiattaforma,come suggerisce il nome queste costanti vengono definite in automatico a seconda della macchina su cui si sta lavorando,quindi basta specificarle così come sono in un #ifdef
#ifdef __LITTLE_ENDIAN
...
#endif
#ifdef __BIG_ENDIAN
...
#endif
--
ValerioMauro - 24 May 2006
Re: Conversione di un double da/in Network Byte Order
Come non detto il codice di prima era errato :D. Ecco la versione corretta
#include<endian.h>
...
#if __BYTE_ORDER==__LITTLE_ENDIAN
...
#endif
#if __BYTE_ORDER==__BIG_ENDIAN
...
#endif
--
ValerioMauro - 24 May 2006
Re: Parametri nei prototipi delle funzioni
E' in linea la nuova versione del modulo LPC_Include.h.
--
GianniCampanile - 24 May 2006
Nuovo LPC_Include.h
Lo possiamo già sostituire al vecchio LPC_Include o dobbiamo attendere la consegna del Modulo3 per non creare problemi?
--
PaoloParlapiano - 25 May 2006
Re: Nuovo LPC_Include.h
Si può già sostituire.
--
GianniCampanile - 25 May 2006
Re: Re: Conversione di un double da/in Network Byte Order
Se lo sto compilando, ad esempio, per una macchina little endian che devo fare dopo quell'#if __BYTE_ORDER==__LITTLE_ENDIAN?
--
EmanueleGallo - 26 May 2006
Chiarimento specifiche
Ho dato uno sguardo alle specifiche. Nella funzione
EditRecord() c'è quella struttura
FieldValue che ci dice quale campo andare a modificare giusto? Però c'è scritto anche che i campi nel Database File possono non essere nell'ordine in cui sono in quella struct. Quindi noi come facciamo a capire se nel database file c'è prima un campo CHARACTER o LOGICAL, ad esempio?
--
EmanueleGallo - 26 May 2006
Re: Chiarimento specifiche
Attenzione che FieldValue e' un
vettore di strutture. Le informazioni sui campi le dovete ottenere leggendole direttamente o tramite altre funzioni.
--
GianniCampanile - 26 May 2006
Gestione degli errori e aderenza alle specifiche
Nella gestione dell'errore di una funzione interna o di sistema, ad esempio un errore di fwrite(), e' considerato non aderenza alle specifiche passare alla LPC_GestioneErrore() una generica stringa di errore, del tipo "errore di scrittura", invece di inserire nella stringa informazioni aggiuntive, come il valore ritornato dalla fwrite(), come nell'esempio della documentazione?
Nella documentazione si dice che "Il messaggio di errore e' una stringa che PUO' contenere le informazioni aggiuntive per il miglior monitoraggio dell'errore" quindi non dovrebbe essere obbligatorio, ma chiedo conferma.
--
AlessandroAgostini - 26 May 2006
Re: Re: Re: Conversione di un double da/in Network Byte Order
devi effettuare l'inversione dei byte dopo aver prelevato da file e prima di scriverci su
--
ValerioMauro - 28 May 2006
Re: Re: Re: Conversione di un double da/in Network Byte Order
Ah devo usare le funzioni che usiamo per convertire i byte?
--
EmanueleGallo - 28 May 2006
Re: Re: Re: Re: Conversione di un double da/in Network Byte Order
No,devi scindere i byte di un double ed invertirne l'ordine,e poi riscriverli nel file o nella variabile che sia in questo ordine invertito
--
ValerioMauro - 28 May 2006
Re: Gestione degli errori e aderenza alle specifiche
Non e' un errore, ma visto che uno scrive una stringa cosa costa aggiungere la stampa dell'errno ? Comunque non è un errore.
--
GianniCampanile - 29 May 2006
Problema nelle specifiche di ReadRecord
Ciao!
La specifica di
ReadRecord dice che, anche nel caso in cui
NumValues == 0, è responsabilità del chiamante allocare il vettore
FieldValues SIA i vari "value" di ogni struttura del vettore.
Compilando e testando il mio codice seguendo tali specifiche, tuttavia, l'ultimo test di
ReadRecord fallisce perché viene chiamata con
NumValues == 0, e il campo "value" di una struttura
FieldValues è un puntatore nullo, quindi non allocato.
Vorrei chiarimenti su questo punto delle specifiche, grazie (penso comunque che sarebbe logico che fosse
ReadRecord ad allocare la memoria necessaria per value).
Grazie
--
AlessandroPiva - 29 May 2006
Warning nella compilazione di TestM4.c
Ho notato che la compilazione di
TestM4.c genera dei warnings, che possono essere risolti includendo <string.h> e <memory.h> nel file.
Ciao
--
AlessandroPiva - 29 May 2006
Re: Warning nella compilazione di TestM4.c
Sono scomparsi i nomi delle librerie dal mio precedente messaggio. Rieccolo scritto:
###
Ho notato che la compilazione di
TestM4?.c genera dei warnings, che possono essere risolti includendo string.h e memory.h nel file.
Ciao
###
--
AlessandroPiva - 29 May 2006
Re: Re: Warning nella compilazione di TestM4.c
Giusto, grazie. Metterò una nota.
--
GianniCampanile - 29 May 2006
Re: Problema nelle specifiche di ReadRecord
Per favore indichi il numero del test. In ogni caso la ReadRecord deve proprio testare che ogni parametro passato sia valido. Non è una buona programmazione allocare all'interno della ReadRecord() per poi liberare nella funzione chiamante. Per questo motivo, in sistemi più completi, esistono delle funzioni apposite di "Prepare" del vettore che dovrà contenere i dati, che eseguono solo l'allocazione.
--
GianniCampanile - 29 May 2006
Re: Re: Problema nelle specifiche di ReadRecord
Come non detto, mi scusi. Avevo messo una memset di troppo, che azzerava i puntatori value oltre ai nomi dei campi... Tolta quella memset va tutto OK.
Comunque è vero, avevo dimenticato quel vecchio adagio di Kernighan e Pike: "deallocare le risorse allo stesso livello di dove vengono allocate"

Sono troppo abituato al garbage collector...
--
AlessandroPiva - 29 May 2006
chiarimento sui test
scusi prof, non ho ben capito che controlli dobbiamo fare nella
Edit su
FieldValue... perche'ad es nel test 40105 e'errato il campo cognome???? e nel 40106 il problema e' che ci deve essere per forza un valore valido???
--
MarcoLaVecchia - 30 May 2006
Re: chiarimento sui test
40105: il campo COGNOME non esiste nel DBF.
40106: non è ammesso che value sia NULL
se dovrà contenere valori.
--
GianniCampanile - 30 May 2006
Errori di compilazione anche con string.h e memory.h inserite
Professore,
la compilazione del testM4.c continua a darmi warning nonostante io abbia inserito le librerie string.h e memory.h... Non riesco a capire il perchè... Gli errori sono gli stessi.
--
AndreaCosentino - 30 May 2006
Re: Errori di compilazione anche con string.h e memory.h inserite
Mi faccia un cut&paste dei warning.
--
GianniCampanile - 30 May 2006
Basta che applichi questa patch e non da piu warning ...
--- TestM4.c.old 2006-05-30 01:54:46.000000000---+0200
---+++ TestM4.c 2006-05-30 01:53:58.000000000 +0200
@@ -10,6---+10,7 @@
#include "LPC_Include.h"
#include <stdio.h>
#include <stdlib.h>
---+#include <string.h>
#define NUMFIELDS 10
#define NUMVALUES 5
--
GabrieleGristina - 30 May 2006
RE:RE: Errori di compilazione anche con string.h e memory.h inserite
Questo sono gli errori ora provo anche la patch suggerita da gabriele.
Grazie.
gcc -c -g -I include -I ../include src/LPC_EditRec.c -o obj/LPC_EditRec.o
gcc -c -g -I include -I ../include src/LPC_ReadRec.c -o obj/LPC_ReadRec.o
gcc -c -g -I include -I ../include src/LPC_LocateRec.c -o obj/LPC_LocateRec.o
gcc -c -g -I include -I ../include src/LPC_Common.c -o obj/LPC_Common.o
ar rc lib/Modulo4.a obj/LPC_EditRec.o obj/LPC_ReadRec.o obj/LPC_LocateRec.o obj/LPC_Common.o
gcc -c -g -I include -I ../include test/TestM4.c -o test/TestM4.o
test/TestM4.c: In function ‘TestEdit’:
test/TestM4.c:201: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestRead’:
test/TestM4.c:339: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestLocate’:
test/TestM4.c:543: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestMisto’:
test/TestM4.c:827: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘Result’:
test/TestM4.c:970: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘ConfrontaFiles’:
test/TestM4.c:1030: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘Startup’:
test/TestM4.c:1075: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1114: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c:1122: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1126: warning: incompatible implicit declaration of built-in function ‘strlen’
gcc test/TestM4.o ../obj/LPC_Err.o lib/Modulo4.a ../Modulo3/lib/Modulo3.a ../Modulo2/lib/Modulo2.a ../Modulo1/lib/Modulo1.a -o test/TestM4
--
AndreaCosentino - 30 May 2006
RE: RE:RE: Errori di compilazione anche con string.h e memory.h inserite
Tutto risolto. Ho provato a riscrivere di nuovo le inclusioni ed è andato tutto a posto. Grazie comunque.
--
AndreaCosentino - 30 May 2006
Cosa fa la edit?
Professore io non ho capito esattamente cosa fa la edit. Nelle specifiche c'è scritto che il campo value della struttura fieldvalue deve essere opportunamente allocato.. Questo significa che noi preleviamo delle informazioni sui campi del DBF ed a seconda del tipo di informazione la mettiamo nel campo value, facendo un cast del puntatore?
Ma poi con queste informazioni che ci dobbiamo fare? Le specifiche, personalmente non mi sembrano molto chiare, magari sono io. Grazie
--
AndreaCosentino - 31 May 2006
Re: Cosa fa la edit?
Il problema credo nasca dal fatto che le specifiche di interfaccia non sono rivolte a voi, ma sono il comportamento della funzione rispetto ad un qualunque utilizzatore. Questo vuol dire che il chiamante della Edit deve allocare il campo value opportunamente, ma di fatto voi, utilizzando il programma di Test,
lo trovate già allocato correttamente.
Nel caso della Edit mi sembra chiaro che dovete scrivere ogni valore passato nella posizione opportuna nel record corrente del DBF.
--
GianniCampanile - 31 May 2006
re:re:cosa fa la edit?
Infatti mi sembrava strano che ci fosse passata una struttura con delle parti da allocare... Nel dubbio ho preferito chiedere. La ringrazio molto. Ora ho le idee più chiare su cosa fare..
--
AndreaCosentino - 31 May 2006
Professore sulle specifiche viene scritto che per la
EditRecord non possiamo usare la
ReadRecord, e non possiamo richiamare una funzione che implementi la logica della
ReadRecord. Significa che la Edit non puo usare lo stesso metodo di lettura della Read? O solamente che non possiamo richiamare la Read?
--
BaggiAlessandro - 31 May 2006
Re: EditRecord e ReadRecord
Che non potete richiamare la Read. Ovviamente potete richiamamre le stesse funzioni di spostamento e lettura della libreria C.
--
GianniCampanile - 31 May 2006
Ricerca del campo
Come faccio a capire dove si trova precisamente un certo campo nel record?
--
EmanueleGallo - 01 Jun 2006
Re: Ricerca del campo
C'è scritto nelle specifiche che "La sequenza dei valori in ogni record sul file rispetta la sequenza dei campi definiti nell'header". Cioè significa che se nell'header incontro per primo, ad esempio, un campo di tipo LOGICAL, allora in ogni record il primo campo è di tipo LOGICAL? Si può usare la struttura
FieldData per avere informazioni sui campi (come la lunghezza)?
--
EmanueleGallo - 01 Jun 2006
Re: chiarimento sulle note
Perchè avete messo nelle note di includere anche memory.h quando questo include non fa altro che controllare se è definito string.h, altrimenti lo definisce !?! Se non fosse perchè usa ifdef sarebbe un errore (secondo le vostre specifiche), e cmq resta il fatto chè è inutile
--
GabrieleGristina - 01 Jun 2006
re:re: ricerca campo
Penso che ti serva a prescindere la struttura
FieldData.. Perchè per vedere se i nomi di fieldValue sono validi, devi confrontarli con tutti quelli di
FieldData.. Per cui credo che si debba usare
GetFieldInfo passandogli una struttura
FieldData allocata appositamente..
--
AndreaCosentino - 01 Jun 2006
Re: Re: Re: Ricerca campo
Ok ho capito grazie. E invece per quanto riguarda la ricerca del campo? Come faccio a capire dove si trova il campo di nome
FieldValue->Name?
--
EmanueleGallo - 01 Jun 2006
Re: Re: Re: Re: Ricerca Campo
Sto cercando di capirlo anch'io!
--
AndreaCosentino - 01 Jun 2006
Re: Soliti Warning
Professore, anche io ho avuto problemi con i warning sopra citati dopo aver fatto solamente i prototipi dcelle funzioni e tentato la compilazione, li ho risolti, però solamente dopo aver incluso string.h e memory.h
NEL VOSTRO FILE DI TEST perchè altrimenti non c'era modo di farli sparire ora la domanda è: Dato che testerete il programma sul vostro file di test, aggiungerete queste inclusioni (Altrimenti mi ritrovo con una "sbragata" di warning)
gcc -c -g -I include -I ../include src/LPC_EditRec.c -o obj/LPC_EditRec.o
gcc -c -g -I include -I ../include src/LPC_ReadRec.c -o obj/LPC_ReadRec.o
gcc -c -g -I include -I ../include src/LPC_LocateRec.c -o obj/LPC_LocateRec.o
gcc -c -g -I include -I ../include src/LPC_Common.c -o obj/LPC_Common.o
ar rc lib/Modulo4.a obj/LPC_EditRec.o obj/LPC_ReadRec.o obj/LPC_LocateRec.o obj/LPC_Common.o
gcc -c -g -I include -I ../include test/TestM4.c -o test/TestM4.o
test/TestM4.c: In function ‘TestEdit’:
test/TestM4.c:201: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestRead’:
test/TestM4.c:339: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestLocate’:
test/TestM4.c:543: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘TestMisto’:
test/TestM4.c:827: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c: In function ‘Result’:
test/TestM4.c:970: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘ConfrontaFiles’:
test/TestM4.c:1030: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c: In function ‘Startup’:
test/TestM4.c:1075: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1114: warning: incompatible implicit declaration of built-in function ‘memset’
test/TestM4.c:1122: warning: incompatible implicit declaration of built-in function ‘strcpy’
test/TestM4.c:1126: warning: incompatible implicit declaration of built-in function ‘strlen’
gcc test/TestM4.o ../obj/LPC_Err.o lib/Modulo4.a ../Modulo3/lib/Modulo3.a ../Modulo2/lib/Modulo2.a ../Modulo1/lib/Modulo1.a -o test
--
GiuseppeDiFederico - 02 Jun 2006
TestM4.c & Valgrind
dopo aver eseguito :
# valgrind --leak-check=full ./TestM4
ottengo :
355 bytes in 10 blocks are definitely lost in loss record 1 of 4
at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
by 0x804C258: Startup (
TestM4.c:1093)
by 0x8048BC9: main (
TestM4.c:112)
355 bytes in 10 blocks are definitely lost in loss record 2 of 4
at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
by 0x804C1D8: Startup (
TestM4.c:1086)
by 0x8048BC9: main (
TestM4.c:112)
355 bytes in 10 blocks are definitely lost in loss record 3 of 4
at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
by 0x804C158: Startup (
TestM4.c:1079)
by 0x8048BC9: main (
TestM4.c:112)
359 bytes in 10 blocks are definitely lost in loss record 4 of 4
at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
by 0x804C2EA: Startup (
TestM4.c:1099)
by 0x8048BC9: main (
TestM4.c:112)
linea 112 di
TestM4.c
// Pulizia iniziale e preparazione dell'handle e allocazione
handle = Startup(handle, reset);
Forse c'e' un errore in
TestM4.c
--
WalterValentini - 02 Jun 2006
libreria del modulo 3
gentile prof, vorrei sapere quando sarà messa online la libreria del modulo 3. Mi sembrava inutile iniziare a scrivere codice adesso se non abbiamo le librerie.
--
MarcoLaVecchia - 02 Jun 2006
Professore, mi è sorto un dubbio guardando il la funziona
ConfrontaFiles da voi implementata nel test. Questa funzione confronta due file e ritorna -1 in caso siano differenti o 0 in caso siano uguali. A priori non so quale file sto modificando, però ho un dubbio. L'istruzione alla riga 322:
if(ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
break;
credo prenda in input il file da noi modificato ed il file di partenza . Il nostro file sarà necessariamente diverso da quello di partenza, e la funzione tornerà sempre -1. Quindi, sempre supponendo che il file con cui confronto il file modificato sia quello di partenza, l'istruzione dovrebbe essere:
if(!ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
break;
Tanto per sapere perchè non riesco a passare proprio l'ultimo test del
ConfrontaFiles: mi sono fatto stampare il valore di
ConfrontaFiles relativo al test, ed è di -1 e viene proprio dalla memcmp dei file presi in input. La ringrazio e scusi la lunghezza, spero di essere stato chiaro.
// Verifica funzionalita' (2)
test[numtest].testid = 40108;
test[numtest].weight = 10;
strcpy(test[numtest].desc, "EDIT: Funzionalita'(2)");
printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
for(;;)
{
ret = GotoRecord(handle, ABSOLUTE, 50);
if (ret != 50)
break;
time(&Start);
// Modifico i primi NUMVALUES
ret = EditRecord(handle, NUMVALUES, &FieldValue[0]);
printf("Ritorno della EditRecord: [%d]\n", ret);
if (ret != LPC_OK)
break;
time(&Stop);
ret = GetDBFInfo(handle, &DBFInfo);
if (ret != LPC_OK)
break;
if ((DBFInfo.CurrentRec != 51) || (DBFInfo.LastUpdate > Stop) || (DBFInfo.LastUpdate < Start))
break;
if(ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
break;
test[numtest].passed = 1;
break;
}
numtest---++;
--
AndreaCosentino - 03 Jun 2006
Re: (senza titolo)TestM4?.c: test numero 40108 dubbio su ConfrontaFiles
In queste righe di codice avviene il confronto tra due file, il file Prova4.dbf che viene copiato con la startup() da
ProvaTest4.dbf, mentre il
ProvaTest1.dbf dovrebbe corrispondere al Prova4.dbf editato. La funzione fa il suo lavoro ed è corretta, magari sbagli qualcosa ...prova ad analizzare il file dopo l'edit con od o con vi,oppure esamina il codice con un debugger.. magari trovi il problema.

if(
ConfrontaFiles("Prova4.dbf", "ProvaTest1.dbf"));
break;
--
BaggiAlessandro - 04 Jun 2006
Re: Re: TestM4?.c: test numero 40108 dubbio su ConfrontaFiles?
Controllando meglio il codice mi ero accorto di aver preso una toppa clamorosa... Cmq ora vedo dove sbaglio, perchè il numero di caratteri che scrivo su file sono giusti, evidentemente sbaglio qualche conversione oppure è un problema di casting di value
--
AndreaCosentino - 04 Jun 2006
Re: TestM4.c & Valgrind
E' dovuto alla doppia inizializzazione quando viene richiamata l'opzione 5. Viene infatti richiamata nuovamente la Startup per reinizializzare tutto, e non viene verificato che non sia stata già fatta un'inizializzazione.
Di fatto viee sprecata un po' di memoria, ma in questo modo c'è anche la sicurezza che c'è una nuova inizializzazione e che i buffer sono tutti a NULL. Non dovete prendere il programma di Test come un fulgido esempio di buona programmazione, non è stato scritto per quello.
--
GianniCampanile - 05 Jun 2006
Confronta Files: Test 40108
Ho dei problemi con l'ultimo test della Edit. Il 40108 confronta appunto due files, il prova4 modificato da noi ed il provatest1 che rappresenta il dbf giusto dopo le modifiche. Non riesco a capire perchè nonostante utilizzi la memcpy per tutta la lunghezza dei miei campi, i NULL che dovrebbero essere scritti sono ignorati in alcuni casi.
ci combatto da un po' e non riesco a venirne a capo. Se scrivo per tutta la lunghezza del campo in teoria dovrei scrivere anche i NULL. Quindi l'unica domanda che mi viene da fare è i NULL finali sono compresi nel
FieldLen che ci viene restituito dalla
GetFieldInfo? Oppure dobbiamo scriverli singolarmente su file? Grazie.
Record Correnti toccati dal test 40108
File ProvaTest1 giusto
0043140 \0 \0 \0 \0 \0 \0 \0 \0 @ @ 200 \0 \0 \0 \0 \0
0043160 \0 \0 \0 003 \t \0 ? 353 327 \n = p 243 327 \0 001
0043200 \0 F \0 H E L L Z A P O P P I N G
0043220 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0043240 \0 \0 V Q \0 0 2 4 3 6 5 \0 \0 \0 \0 \0
0043260 V i a A l v i s e P e r s i
0043300 c h e t t i 7 7 \a \a \a \0 \0 \0 G
0043320 a b r i e l e G r i s t i n a \0
0043340 h i \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0043360 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
File Prova4 mio sbagliato
0043140 \0 \0 \0 \0 \0 \0 \0 \0 @ @ 200 \0 \0 \0 \0 \0
0043160 \0 003 \t ? 353 327 \n = p 243 327 001 F H E L
0043200 L Z A P O P P I N G \0 \0 \0 \0 \0 \0
0043220 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0043240 \0 \0 V Q \0 0 2 V i a A l v i s
0043260 e P e r s i c h e t t i 7 7
0043300 \a \a \a \0 \0 3 \0 _ 1 \0 _ 5 8 2 \0 G
0043320 a b r i e l e G r i s t i n a \0
0043340 h i \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0043360 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
--
AndreaCosentino - 05 Jun 2006
Test 40305 e 40306
Salve, vorrei sapere perchè il test 40305 si aspetta LPC_BAD_FIELD mentre il test 40306 si aspetta LPC_BAD_ARG quando la specificazione dell'errore è la stessa, ovvero
FieldValue errato. A mio parere risulta abbastanza scomodo per la ricerca degli errori...Grazie
--
PaoloParlapiano - 05 Jun 2006
Re: Soliti Warning
Professore scusi, ma nn ha risposto alla domanda che le avevo fatto venerdi 2, come facciamo con questi warning? Includerete string.h e memory.h nel vostro file di test ?
--
GiuseppeDiFederico - 05 Jun 2006
Re: Soliti Warning
E' ovvio che i warning che non dipendono dal vostro codice non verranno considerati errori.
--
GianniCampanile - 06 Jun 2006
Re: Test 40305 e 40306
In un caso è errato il nome del campo, nell'altro la variabile passata. Le specifiche della funzione prevedono due errori diversi.
--
GianniCampanile - 06 Jun 2006
Qualche domanda
Salve, vorrei porre le seguenti domande:
1 - Anche per questo modulo la sequenzialità dei test è obbligatoria? E' possibile iniziare a sviluppare la
LocateRec ed ottenere una valutazione corretta con il relativo test?
2 - Dopo alcuni problemi nello sviluppo della
LocateRec ho fatto una prova di lettura di tutto il file Prova4.dbf come char mettendolo in un vettore abbastanza grande, ma la lettura si blocca al byte 34464, e poi con l'avanzare dei tests cambia ancora di valore ma non arriva mai alla fine del file. Facendo un'altra prova con un sorgente esterno la lettura avviene correttamente, ne deduco quindi che i tests bloccano in qualche modo l'avanzamento della fread, ma qual'è il motivo?
Dal byte 34464 dovrebbero partire i controlli nel caso CURRENT, e a causa di questo problema non riesco ad andare avanti.
Grazie
--
PaoloParlapiano - 06 Jun 2006
Re: Qualche domanda
1. E' meglio farli sequenzialmente. Non so se partendo con la Locate funzionano.
2. Non ho capito il problema, ma non credo sia la strada per andare avanti. Eviti di leggere tutto il file, in ogni caso non è consentito, e legga solo un record alla volta. Sviluppare prima la Read serve anche a capire meglio come sviluppare la Locate
--
GianniCampanile - 06 Jun 2006
short FieldType //!< Tipo di campo NBO O HOST
SALVE
Nel primo modulo si e detto che anche se non e detto esplicitamente (specifiche di interface) queste campo "FieldType" nel file .dbf va scritto in NBO , ma in questo Modulo(4) vedo che in un file non e in NBO. Non so se mi sbaglio.
--
AlbanKomici - 06 Jun 2006
Re: Stranezza nelle specifiche
Professore, scusi ma nelle specifiche, nella definizione di struttura FIELD_VALUE_t c'è un solo campo: nome[DBF_NAME_LENGTH], nn ci dovrebbe essere anche void * value?!? Mi sono impiccato questi giorni per capire quale era il valore da sostituire al nomecampo, del record corrente, poi mi sono ricordato che a lezione ci aveva parlato di un void * value, ma nelle specifiche html non viene citato, nel caso mi stia sbagliando, dove lo vado a pescare questo benedetto value?
--
GiuseppeDiFederico - 07 Jun 2006
Re: short FieldType //!< Tipo di campo NBO O HOST
Mi può dire in che file e quale campo ?
--
GianniCampanile - 07 Jun 2006
Re: Re: Stranezza nelle specifiche
ModuloQuattro
--
GianniCampanile - 07 Jun 2006
Re: Stranezza nelle specifiche (continuo a nn capire)
Pezzo di testo estratto dalle specifiche interne:
La struttura di lettura
Il campo value della struttura FIELD_VALUE_t è un void *, quindi può essere utilizzato per leggere qualunque tipo di dato.
Questo invece è: Modules/specifiche comuni a tutti i moduli/ strutture/ FIELD_VALUE_t :
Data Fields
char Name [FIELD_NAME_LENGTH---+1]
Nome del campo.
STOP E' evidente che la struttura FIELD_VALUE_t è composta dal solo campo Name, ma le specifiche citate sopra non citavano un campo void * value della struttura FIELD_VALUE_t dove è?!? io ne vedo solo uno!!!
Per favore professore, se ho capito qualcosa male non mi metta un altra volta il link al modulo4 che l'ho letto 10 mila volte, ma mi spieghi cosa non ho capito !!
--
GiuseppeDiFederico - 07 Jun 2006
Re: Re: Stranezza nelle specifiche (continuo a nn capire)
Nella pagina del
ModuloQuattro c'è da tempo il nuovo file LPC_Include.h che sostituisce il precedente.
--
GianniCampanile - 07 Jun 2006
Differenza tra file
Professore siccome i file sono molto grandi e con il comando od -c non si riesce a vederlo tutto, esiste un comando per vedere dove i due file sono diversi ?
--
SimoneDiCola - 07 Jun 2006
Edit Record: controllo del nome e scrittura sul file
Professore volevo sapere se dobbiamo per forza controllare prima che tutti i nomi dei campi contenuti nel vettore di
FieldValue siano corretti oppure possiamo scrivere sul file fino a quando incontriamo un nome non corretto (quest'ultima cosa mi permetterebbe di evitare un controllo ridondante sui nomi)
--
ValerioMauro - 07 Jun 2006
Re: Re: Re: Stranezza nelle specifiche
Ho capito, quindi la struttura che c'è nelle specifiche è
ERRATA infatti nel modulo 4 se clicco su FIELD_VALUE_t mi fa vedere la vecchia struttura con un solo campo che non va---+ bene, e che mi ha fatto perdere tanto tempo (nn riuscivo a capire dove era questo value). Ora è chiaro grazie.
--
GiuseppeDiFederico - 07 Jun 2006
Re: Re: short FieldType? //!< Tipo di campo NBO O HOST
Nel file Prova4.dbf dell Modulo4 vedo che il campo
FieldType dei definizini non é in NBO
//! Definizione di un campo del database
typedef struct {
char Name[FIELD_NAME_LENGTH---+1]; //!< Nome del campo
short FieldType; //!< Tipo di campo
short FieldLen; //!< Lunghezza del campo. Se numerico, lunghezza della parte intera.
short FieldDecs; //!< Decimali del campo (se ve ne sono, altrimenti 0)
} FIELD_DATA_t;
--
AlbanKomici - 07 Jun 2006
Pagina di consegna
Salve, quando prevedete di mettere la pagina di consegna per il modulo 4? Grazie
--
PaoloParlapiano - 08 Jun 2006
Re: Re: Re: short FieldType?? //!< Tipo di campo NBO O HOST
A me sembra in NBO.
--
GianniCampanile - 08 Jun 2006
Test sulla EditRecord e Test Misto ripetuti danno errore?
Professore io ho il 100 su 100 con entrambe ma solo la prima volta che le eseguo,nel momento in cui provo ad eseguire il test misto ad esempio la prima locate record che agisce su una posizione CURRENT mi trova i valori che cerco nel record numero 20 del file,nella
EditRecord il test finale fallisce ma questo già é più ovvio perchè ho appena modificato tutto;volevo solo sapere se é normale che vada così oppure no.
--
ValerioMauro - 08 Jun 2006
Re: Test sulla EditRecord e Test Misto ripetuti danno errore?
In generale non è garantito che l'esecuzione ripetuta dei test dia risultati corretti, perché i files vengono modificati. Visto che è parecchio in anticipo però, cerchi di capire lei stesso se l'errore è proprio dovuto a questo.
--
GianniCampanile - 08 Jun 2006
FFLUSH: va messa o meno?
Professore un'altra cosa,la fflush va utilizzata o no in questo modulo?
--
ValerioMauro - 08 Jun 2006
(senza titolo)
EditRecord (
ReadRecord) && NBO
Salve Prof.
Vedo che i dati (campi )da modificare "Field[i].value" devvono essere neccesariamente convertiti in NBO prima di scriverli ne
CurrentRec .Pero nelle Specifiche si dice solo modificare il
CurrentRec con i dati presente nell vettore
FieldValue.
Riguarda al
FieldType nei definizone dei campi vedo che non sono in NBO
--
AlbanKomici - 08 Jun 2006
Salve Prof. Vedo che i dati (campi )da modificare "Field[i].value" devvono essere neccesariamente convertiti in NBO prima di scriverli ne
CurrentRec? .Pero nelle Specifiche si dice solo modificare il
CurrentRec? con i dati presente nell vettore
FieldValue?.
Riguarda al
FieldType? nei definizone dei campi vedo che non sono in NBO
--
AlbanKomici - 08 Jun 2006
Pagina consegna modulo 4.
Qaundo verrà messa online tale pagina ?
--
SimoneDiCola - 09 Jun 2006
Re: EditRecord (ReadRecord) && NBO
E' vero che non è detto esplicitamente, ma i campi numerici devono essere TUTTI convertiti in NBO.
Per il
FieldType le ho già risposto: a me sembra tutto in NBO.
--
GianniCampanile - 09 Jun 2006
Verbalizzazione
Mi scuso per OFF TOPIC ma non sapero dove postare.
E' possibile sapere la data della discussione e veralizzazione dell'esame?
grazie
--
AlessandroCasciaro - 10 Jun 2006
Re: Verbalizzazione
Ho messo alcune indicazioni sulla pagina degli esami.
--
GianniCampanile - 12 Jun 2006
Conversione long
Salve professore potrebbe spiegarci meglio come si può capire se una macchina è big endian o little endian e come dobbiamo comportarci in entrambi i casi? Grazie mille.
--
AlessioDezi - 15 Jun 2006
big Endian= NBO
Salve professore. giustamente lei mi ha detto che chiedevo un po troppo, però adesso vorrei solamente sapere se Big Endian equivale al Network byte order come risulterebbe da alcune ricerche da me effettuate. Grazie.
--
AlessioDezi - 16 Jun 2006
Re: big Endian= NBO
Si
--
GianniCampanile - 16 Jun 2006
Test 40103
Salve professore, nelle specifiche c'è scritto che
NumValues deve essere > 0 e <= del Numero di record, però nel test 40103 si da come valore 100 e facendo una getDBFInfo il numero di record che mi ritorna è 100, quindi non dovrebbe dare errore di un
NumValues errato. Grazie.
--
AlessioDezi - 16 Jun 2006
Tipo di ritorno della LocateRec()
ma considerando che i campi
NumRecs e
CurrentRec sono long int non dovrebbe esserlo anche il ritorno della locate ovvero il nuovo record corrente?
--
FerdinandoAlessi - 19 Jun 2006
Re: Tipo di ritorno della LocateRec()
Si, è un errore. Su Linux32 non dovrebbe generare alcun warning perché sizeof(int)==sizeof(long).
--
GianniCampanile - 19 Jun 2006
Alcune domande sulla ReadRecord()
Ho alcuni dubbi su questa funzione. A seconda del valore di
FieldValue->Name bisogna leggere nel file il valore del campo corrispondente? Il valore del campo che dovrò memorizzare nella struttura come faccio a capire qual'è?
--
EmanueleGallo - 19 Jun 2006
Re: Alcune domande sulla ReadRecord()
Quello che non ho capito in particolare è come faccio per trovare la posizione del campo che devo andare a leggere. Su cosa mi baso?
--
EmanueleGallo - 20 Jun 2006
Probabile errore di eccessiva allocazione di memoria?
Un' allocazione di questo tipo può essere considerato un errore per eccessiva allocazione di memoria visto che il numero dei campi può arivare al valore massimo di 255 oppure va bene?
data=(FIELD_DATA_t*)calloc(sizeof(FIELD_DATA_t),numero_campi_del_database);
--
PaoloGrasso - 20 Jun 2006
Re: Probabile errore di eccessiva allocazione di memoria?
Se si vogliono leggere tutti i campi deve essere fatta per forza, se non c'è memoria verrà restituito errore.
--
GianniCampanile - 21 Jun 2006
Edit Rec
gentile professore, non so se ho capito bene cosa va fatto nella
EditRec: dopo i controlli preliminari sulla correttezza dei dati passati , io vedo quali campi del database corrispondono a quelli nella struttura
FieldValue e quelli uguali li modifico nel database... e' giusto??? o sto dimenticando qualcosa???
--
MarcoLaVecchia - 21 Jun 2006
test 40105
ah, dimenticavo, come mai il test 40105 considera errato il campo COGNOME? se ho capito bene e' perche' non e' contenuto nel database, ma ho fatto un po di stampa e mi sembra non sia l'unico: sono presenti 10 campi e tutti con valori strani e l'unico campo che e' in comune con fieldvalue e' Comune. Aspetto suggerimenti
--
MarcoLaVecchia - 21 Jun 2006
Re: Edit Rec & test 40105
Solo questo. Se le sembra poco possiamo aggiungere qualche conversione qui e là....
Per quanto riguarda il test, mi sembra che i campi corrispondano ai campi del DB.
--
GianniCampanile - 21 Jun 2006
re: edit rec & test 40105
ok, grazie ho risolto per l'errore. La prima domanda ok, volevo sapere solo in linea di massima
--
MarcoLaVecchia - 21 Jun 2006
modalità esame
Scusi professore, vorrei sapere se all'esame è necessario che portiamo i moduli che abbiamo gia consegnato, oppure la discussione avverrà direttamente sulle copie da noi inviate?? Le chiedo questo perchè per un problema al pc ho smarrito i moduli inviati sinora...
--
MarcoLaVecchia - 21 Jun 2006
Possibile errore nel test 40313
Quando devo cercare le informazioni sul record 20 (il record da ritornare quindi), e faccio la comparazione dei campi del record 20 con i valori dei
FieldValue, quando devo controllare il campo "sesso" io dal file leggo "M" che dovrebbe essere corretto, mentre il valore del campo passatomi nel vettore
FieldValue vale "H", sbaglio qualcosa io o e un errore del test?
Ho controllato anche gli altri due campi del vettore e quelli che leggo io,sono uguali, quindi sono abbastanza sicuro che e un errore nel test.
--
PaoloGrasso - 21 Jun 2006
Re: modalità esame
Sulle copie inviate, almeno per quanto riguarda il mio canale non avete bisogno di portare voi il codice.
--
GianniCampanile - 22 Jun 2006
Re: Possibile errore nel test 40313
Il test 40313 usa il vettore Record20 e non FieldValue. Credo che lei vada a leggere la prima lettera del campo Comune di FieldValue.
--
GianniCampanile - 22 Jun 2006
errore test 40103 rispetto alle spacifiche
professore ho notato che il test 40103 controll che ritori errore se ho
NumValues==NumRecs, però secondo la documentazione
NumValuesdeve essere <NumRecs, di conseguenza questo test passa correttamente se lo provo a fare seguendo le indicazioni del html. che cosa devo fare? seguo le specifiche e lasco il controllo per
NumValues<NumRecs o lo modifico(anch e mi sembra un inosservanza delle specifiche) solo per superare il test??
--
StefanoLAVAGNO - 22 Jun 2006
errore test 40103 rispetto alle spacifiche2
NumValues <= a
NumRecs nelle specifiche, ho sbagliato a scrivere...
--
StefanoLAVAGNO - 22 Jun 2006
Re: errore test 40103 rispetto alle spacifiche
Potrebbe essere piu' chiaro ? Non credo sia quello il numero del test a cui si riferisce
--
GianniCampanile - 22 Jun 2006
(senza titolo)
nella funzione Edit nell'ultimo test della funzionalita', ho il seguente errore che non mi fa passare il test.
Cosa devo fare?
Test:[40108] Peso:[10] - [EDIT: Funzionalita'(2)]
Ritorno della EditRecord: [0]
Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]]
--
OnelioCancellieri - 23 Jun 2006
comportamento della edit
gentile prof, non ho capito bene quale deve essere il comportamento della Edit in merito ad lcuni casi: se la Edit modifica l'ultimo record del database, alla fine deve ritornare LPC_ERR_EOF??? insomma quando il file pointer si trova a fine file, va effettuato lo spostamento al record successivo???
--
MarcoLaVecchia - 24 Jun 2006
Re: comportamento della edit
non penso, perchè sarà una chiamata successiva alla Edit a generare LPC_ERR_EOF.e comunque il file pointer va lasciato alla fine del record modificato.
--
StefanoGuglielmi - 25 Jun 2006
strano errore
facendo anche le altre funzioni oltre alla Edit ho sempre lo stesso errore, potrei sapere a cosa si riferisce?
Grazie.
Test:[40108] Peso:[10] - [EDIT: Funzionalita'(2)]
Ritorno della EditRecord: [0]
Errore [-7] in [GetDBFInfo]-->[Errore di sistema [2] in spostamento su file [No such file or directory]]
--
OnelioCancellieri - 25 Jun 2006
Re: strano errore
Usi l'ultima versione della libreria del modulo2, c'è un controllo migliore dell'errore.
--
GianniCampanile - 26 Jun 2006
Re: Re: errore test 40103 rispetto alle spacifiche
nella riga 228 sel testm4 c'è passa alla funzione:
ret =
EditRecord(handle, 100, &FieldValue[0]);
ed il numero dei record sono appunto 100, qunidi il test controlla che numvalues sia < di numfields poichè si aspetta 1 errore,se invece aspettasse <= come è scritto nella documentazione html dovrebbe passare il test con PLC_OK, come bisogna comportarsi di conseguenza?
--
StefanoLAVAGNO - 26 Jun 2006
Re: Re: Re: errore test 40103 rispetto alle spacifiche
Legga bene le specifiche.
--
GianniCampanile - 26 Jun 2006
Salve professore, potrebbe spiegarmi meglio la funzione di test
ConfrontaValues?
FieldValue dovrebbe essere quello creato da noi con la
ReadRecord, e
FieldValueRef e
FieldData cosa contengono?perche i nomi dei campi nelle diverse strutture devono essere diversi? Grazie.
--
AlessioDezi - 29 Jun 2006
Alla
GetFieldInfo se si passa un campo non valido dovrebbe tornare LPC_BAD_FIELD invece ho notato ke torna LPC_BAD_ARG. vorrei sapere se sono io che sbaglio qualkosa oppure se c'è un errore nella vostra funzione
--
MarcoLaVecchia - 01 Jul 2006
Anche io ho riscontrato la stessa cosa, perchè se il campo "Name" non è valido dovrebbe tornare LPC_BAD_FIELD e invece torna LPC_BAD_ARG (deve tornare LPC_BAD_ARG solo se l'handle non valido,
NumFields < 0 o puntatore
FieldData NULL).
--
LucaTartaglia - 01 Jul 2006
Professore, sono giorni e giorni che sono bloccato su questo
ConfrontaFiles della Edit, e non riesco proprio a venirne a capo. Ho persino modificato il vostro file di test per vedere precisamente quali sono i byte che "sfarloccano" e praticamente sono tutti quelli modificati. Eppure ho seguito le specifiche e fatto tutto "correttamente":
per esempio:
case DATE:
variabile = (long)(FieldData->value);
variabile = htonl(variabile)
fwrite......
break;
Il byte sul quale scrivo è giusto, ed ogni posizionamento è stato ricontrollato più volte, ci deve essere qualche problema che mi sfugge
P.S Che significa
i valori da non modificare vanno preservati quindi è opportuno leggere prima il record?
Non possiamo semplicemente posizionarci sul punto giusto e fare un fwrite di sizeof(tipo)?
Grazie confido in qualche "suggerimento illuminante"
--
GiuseppeDiFederico - 03 Jul 2006
Ma perchè nel test
FieldValue(2), si fanno alcune modifiche sul primo record e poi, nel test funzionalità(2), quando fa il confronto dei file nel file
ProvaTest quel record non è mai stato toccato? Questo ovviamente mi fa fallire il test perchè i miei valori sono modificati e non corrispondono!!!
--
GiuseppeDiFederico - 03 Jul 2006
Errore nella libreria del modulo 2
Usando la
GetFieldInfo mi sono accorto che forse c'è un errore di congruenza con le specifiche, cioè quando un campo non è valido dovrebbe ritornare LPC_BAD_FIELD che si riferisce al campo non valido mentre torna LPC_BAD_ARG che si riferisce a handle non valido,
NumFields < 0 o puntatore
FieldData NULL.
--
AlessandroCasciaro - 06 Jul 2006
informazioni sulle strutture utilizzate nel LPC_Include
Nel file LPC_INCLUDE.h sono definiti dei campi di struct tra cui
In FIELD_DATA_t:
short
FieldLen; //!< Lunghezza del campo. Se numerico, lunghezza della parte intera.
In DBF_INFO_t:
int
NumFields; //!< Numero dei campi del database
Volevo sapere se
FieldLen e' la lunghezza del campo compreso il nome del campo o solamente del valore del campo e se
NumFields è il numero dei campi totali nel dbf o il numero di campi in uno dei record del dbf.
Volevo anche chiedere se nella
EditRecord i valori in
FieldValue corrispondono al tipo del campo o devono essere controllati prima di essere scritti sul file
Grazie
--
ColocciDaniele - 06 Jul 2006
Consegna
Per questioni di comodità è possibile consegnare l'intera cartella Modulo4 al cui interno sono contenuti tutti i file richiesti?
--
MassimilianoNatale - 06 Jul 2006
Gestione della funzione errore in chiamate ad albero
Salve, vorrei porre due domande: ho sviluppato il modulo 4 appoggiandomi su funzioni ausilarie nel LPC_Common.c che in alcuni casi si chiamano tra loro.
Ad esempio per ogni tipo di campo ne ho una che legge il suo contenuto su file per restituirlo poi al chiamante. Queste vengono invocate da altre funzioni nel LPC_Common.c che servono per comparare, memorizzare ecc.
Ovviamente queste ultime sono chiamate dalle funzioni principali del modulo, ma questa gerarchia non viene sempre rispettata e le sequenze delle chiamate variano a seconda delle esigenze: ad esempio se ho bisogno di leggere un campo chiamo direttamente la funzione che fa l'I\O su file, se ho bisogno di leggerlo e compararlo con un valore che possiedo, chiamo la funzione che compara i valori che si occuperà autonomamente di chiamare la funzione di lettura su file, e tutto varia in oltre in base al tipo di campo su cui lavorare.
La mia domanda è: se la funzione al ramo più basso di queste chiamate intercetta un errore (dovuto ad esempio a mancata lettura o scrittura su file), la segnalazione dell'errore come deve avvenire fino al raggiungimento della radice delle chiamate?
In particolare vorrei sapere se è giusto che tutte stampino l'errore. Vorrei in oltre precisare che sono errori generati dalla mancata lettura o scrittura su file, cioè come si suol dire "situazioni patologiche", infatti facendo il test in condizioni normali questi non vengono mai stampati.
Arrivando al punto, se tutte (mai più di 3 per volta compresa la funzione Read, Edit, o Locate) stampano l'errore, il controllo delle specifiche viene passato?
La seconda domanda che vorrei porre è questa: in una funzione ausiliaria che compara due valori per vedere se sono uguali, è lecito usare come valori di ritorno LPC_OK se il confronto ha avuto successo e LPC_NOT_FOUND in caso contrario ma senza stampare errori?
Oppure è meglio ritornare costanti numeriche come 0 e -1?
Grazie
--
PaoloParlapiano - 07 Jul 2006
Ciao a tutti! qualcuno saprebbe dirmi se nella funzione
EditRecord quando solo uno dei campi non è esatto, gli altri si devono inserire ugualmente o meno?
Ad esempio i primi 3 nomi di campo sono esatti. Il quarto no. A questo punto dovrò modificare i primi tre o no? Nelle specifiche non è chiaro, e nel test mi fallisce sempre il confrontafiles.
Grazie
--
GianlucaAlbanese - 07 Jul 2006
Errore memcmp() Test
Salve professore, il programma di test mi da errore sulla memcmp() ( le allego il risultato di valgrind ) volevo chiederle se
FieldLen contiene la lunghezza solamente nel caso di stringhe o anche in caso di altri tipi di campi, visto che non riescoa spiegarmi l'errore.
8520
Invalid read of size 1
8520
at 0x1B9014A8: bcmp (in /usr/lib/valgrind/vgpreload_memcheck.so)
8520
by 0x804C9C6:
ConfrontaValues (
TestM4.c:1218)
8520
by 0x804A4D9:
TestRead (
TestM4.c:472)
8520
by 0x8048EAB: main (
TestM4.c:158)
8520
Address 0x52BFDC24 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yes
8520
8520
Invalid read of size 1
8520
at 0x1B9014CB: bcmp (in /usr/lib/valgrind/vgpreload_memcheck.so)
8520
by 0x804C9C6:
ConfrontaValues (
TestM4.c:1218)
8520
by 0x804A4D9:
TestRead (
TestM4.c:472)
8520
by 0x8048EAB: main (
TestM4.c:158)
8520
Address 0x52BFDC25 is just below the stack ptr. To suppress, use: --workaround-gcc296-bugs=yes
for (i = 0; i < NumValues; i---++)
{
for (j = 0; j < NUMFIELDS; j---++)
if (!strcmp(FieldValue[i].Name, FieldData[j].Name))
break;
for (k = 0; k < NUMFIELDS; k---++)
if (!strcmp(FieldValue[i].Name, FieldValueRef[k].Name))
break;
if (memcmp(FieldValue[i].value, FieldValueRef[k].value, FieldData[j].FieldLen))
break;
}
--
AlessioDezi - 07 Jul 2006
Re: ConfrontaValues
Serve ovviamente per confrontare i valori. Il primo loop interno serve per trovare l'indice di corrispondenza per prendere la lunghezza. Il secondo per trovare l'indice di corrispondenza tra i due vettori passati. La memcmp per confrontare il valore. questo perché la posizione del campo non è in genere la stessa nei due vettori passati alla funzione e la lunghezza non c'è nella struttura
FieldValue.
--
GianniCampanile - 09 Jul 2006
Re: Re: GetFieldInfo
E' vero e' un errore nel codice. Non mi sembra che crei problemi nel Modulo4 ma tenetene conto e grazie per la segnalazione.
--
GianniCampanile - 09 Jul 2006
Re: ConfrontaFiles
Forse un problema di flush ?
Ovviamente potete scrivere solo i valori da modificare, ma, non essendo sempre contigui, il posizionamento può essere più complicato che leggere tutto il record, modificare in memoria SOLO i valori richiesti e riscrivere tutto il record.
--
GianniCampanile - 09 Jul 2006
Re: FieldValue(2)
Indiche per favore il numero dei test e le righe del programma di test.
--
GianniCampanile - 09 Jul 2006
Re: Gestione della funzione errore in chiamate ad albero
Credo che le specifiche della funzione di errore rispondano alle sue domande, ma in sintesi: se una funzione intercetta un errore, a qualunque livello, deve stamparlo, liberare la memoria da lei allocata, chiudere i file da lei aperti e ritornare. Questo, in caso sia una funzione annidata, causa un albero di stampa di errori che
e' proprio quello che si vuole perche' è molto più facile trovare la causa dell'errore. Per quanto riguarda le costanti, potete ovviament utilizzare qualunque costante gia' dichiarata (ad.es. LPC_OK) purché non facciate conto sul suo valore, cioè non consideriate il fatto che vale 0, altrimenti definitene di vostre.
--
GianniCampanile - 09 Jul 2006
Re: EditRecord
deve ritornare errore.
--
GianniCampanile - 09 Jul 2006
Re: Errore memcmp() Test
Mi semgra dalla valgrind ce ci siano problemi di accesso al vettore.
Modifiche il file di test facendo stampare i valori che poi vengono utilizzati dalla memcmp.
--
GianniCampanile - 09 Jul 2006
Controllo Value
Professore, ho un problema che sembrerebbe inspiegabile nella read:
Nel test di funzionalità con
NumFields=0, quando mi fa il controllo finale, i primi 2 cicli me li passa senza problemi, poi, quando arriva i=3 mi fallisce il memcmp perchè
FieldValue[i].value = 123,45599... mentre
FieldValueRef[k].value = 123,456 Come è possibile una cosa del genere, anche perchè nella i=0, già l'aveva controllato con successo un NUMERIC, non credo sia un problema di conversione, perchè i valori sono troppo simili. Come posso affrontarlo questo problema?
Grazie!!!
--
GiuseppeDiFederico - 09 Jul 2006
Valgrind e memoria non liberata
Ho notato che facendo girare il programma con valgrind e impostando i parametri --leak-check=full e -v trova che 40 blocchi di memoria (per un totale di 1424 bytes) vengono allocati dalla funzione Startup di
TestM4.c e poi non vengono liberati.
Volevo chiedere inoltre se qualcuno sa cosa si intende con (suppressed: 11 from 1) e se in qualche modo può essere collegato a questa mancata liberazione di memoria? (in pratica mi interessa sapere se con questo output per quanto riguarda gli errori di memoria sto a posto :-D)
Grazie.
L'output di valgrind:
==4499==
==4499== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 1)
==4499== supp: 11 Ubuntu-stripped-ld.so
==4499== malloc/free: in use at exit: 1,424 bytes in 40 blocks.
==4499== malloc/free: 1,291 allocs, 1,251 frees, 187,368 bytes allocated.
==4499== For counts of detected errors, rerun with: -v
==4499== searching for pointers to 40 not-freed blocks.
==4499== checked 79,612 bytes.
==4499==
==4499== 355 bytes in 10 blocks are definitely lost in loss record 1 of 4
==4499== at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499== by 0x804C1C4: Startup (TestM4.c:1105)
==4499== by 0x8048C38: main (TestM4.c:114)
==4499==
==4499==
==4499== 355 bytes in 10 blocks are definitely lost in loss record 2 of 4
==4499== at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499== by 0x804C14C: Startup (TestM4.c:1098)
==4499== by 0x8048C38: main (TestM4.c:114)
==4499==
==4499==
==4499== 355 bytes in 10 blocks are definitely lost in loss record 3 of 4
==4499== at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499== by 0x804C0D4: Startup (TestM4.c:1091)
==4499== by 0x8048C38: main (TestM4.c:114)
==4499==
==4499==
==4499== 359 bytes in 10 blocks are definitely lost in loss record 4 of 4
==4499== at 0x401B8F1: calloc (vg_replace_malloc.c:279)
==4499== by 0x804C24E: Startup (TestM4.c:1111)
==4499== by 0x8048C38: main (TestM4.c:114)
==4499==
==4499== LEAK SUMMARY:
==4499== definitely lost: 1,424 bytes in 40 blocks.
==4499== possibly lost: 0 bytes in 0 blocks.
==4499== still reachable: 0 bytes in 0 blocks.
==4499== suppressed: 0 bytes in 0 blocks.
--
DanieleSchirmo - 09 Jul 2006
Re: Controllo Value
Non si fidi troppo della stampa ma verifichi che i valori binari siano diversi. Se sono diversi ci deve essere un errore di lettura.
--
GianniCampanile - 10 Jul 2006
Re: Valgrind e memoria non liberata
se n'era gia' parlato in un topic precedente. Il programma di Test puo' essere "sporco", ma questo non influenza il voto. Qualunque errore o warning imputabile al programma di test non viene considerato.
--
GianniCampanile - 10 Jul 2006
Problema con il test misto
Nel test misto lei mi da
CurrentRec = 1 e
NumRecs = 0 quindi dovrei ritornare LPC_ERR_EOF invece lei si aspetta LPC_NOT_FOUND, perche'
// 3
ret = LocateRecord(handle1, 3, &Record20[0], CURRENT);
printf("Ritorno della LocateRecord: [%d]\n", ret);
if (ret != LPC_NOT_FOUND)
break;
--
MarioDiFrancesco - 10 Jul 2006
Errore sconosciuto
Nella funzione
EditRecord() ho utilizzato la funzione
InsertBlankRecord() come ausilio.
Tutto OK nel test singolo ma nel test misto, alla seconda iterazione del ciclo for, ricevo un errore del tipo
Errore della funzione CreaSpazioPerRec
che è evidentemente chiamata dalla
InsertBlankRecord() e che non ho modo di controllare (facendo parte delle librerie da voi fornite).
Che genere di errore può essere?
--
MassimilianoNatale - 11 Jul 2006
Nel caso in cui sia errato How nella locate record si deve ritornare LPC_BAD_ARG anche se nelle specifiche non vi è associazione tra questo tipo di errore è How.Un altra domanda : nel codice del test c'è di fermarsi se fine file if (ret = LPC_ERR_EOF)break; però nei ritornio della locate non è previsto questo tipo di ritorno LPC_ERR_EOF come ci dobbiamo comportare
--
AlessandroCasciaro - 11 Jul 2006
Re: Problema con il test misto
Specifiche della Locate record:
Se nel file non ci sono record viene
* ritornato sempre \p LPC_NOT_FOUND senza errore.
--
GianniCampanile - 11 Jul 2006
Mi scuso per la seconda domanda su LPC_ERR_EOF distrattamente ho letto il codice della Edit.
--
AlessandroCasciaro - 11 Jul 2006
Re: Errore sconosciuto
Includa tutto l'output di errore
--
GianniCampanile - 11 Jul 2006
Re: Re: Ritorno della LocateRecord
Si, ovviamente il commento sui codici di ritorno è incompleto per quanto riguarda LPC_BAD_ARG.
--
GianniCampanile - 11 Jul 2006
Re: Re: Errore sconosciuto
Questo l'errore completo che ricevo
Errore [-6] in [CreaSpazioPerRec]-->[Errore di sistema [2] in lettura su file:[No such file or directory]]
Errore [-6] in [InsertBlankRecord]-->[Errore dalla funzione CreaSpazioPerRec:[-6]]
Errore [-5] in [EditRecord]-->[Error in Insert function]<BR>
--
MassimilianoNatale - 11 Jul 2006
Trasformazione double
Salve professore, volevo chiederle se il procedimento per trasferire un double da network in host e viceversa sia lo stesso, c'è invertire il posto di ogni byte, perche per quando riguarda la trasformazione da Host a Network il programma va tutto ok, mentre trasformando da Network a Host invertendo i byte il programma di test non trova i dati equivalenti a quelli presenti nella struttura di riferimento. Grazie.
--
AlessioDezi - 11 Jul 2006
Re: Trasformazione double
Si', e' lo stesso.
--
GianniCampanile - 11 Jul 2006
Re: Re: Re: Errore sconosciuto
Vuol dire che il file pinter non e' piu' valido. Questo succede se c'è un buffer overflow. Verifichi tutte le scritture sui vari buffer.
--
GianniCampanile - 11 Jul 2006
Salve. Nel mio codice io non uso la
GetFieldInfo ma prendo le informazioni sui campi a mano dall'header, usando fread e fseek. E' un errore?
--
PaoloGrasso - 12 Jul 2006
Trasformazione double
Salve professore,come le ho detto precedentemente , la traformazione di un double nella edit mi funziona,ma sulla read e la locate mi da problemi, qui le allego i valori che differiscono e che fanno fallire il test.
FieldValue = 1179018854
FieldValuestr = ffFF@
FieldValueRef = 1717986918
FieldValueRefstr = fffffFF@
--
AlessioDezi - 12 Jul 2006
Un record è composto solamente da valori separati da un Null ?
quindi quando inserisco il valore
FieldValue.value nel record, devo inserire un Null nel byte successivo a dove finisce il valore, esatto?
--
ColocciDaniele - 12 Jul 2006
Controlli da fare su value e sui nomi dei campi in FieldValue
Nelle specifiche c'è scritto che la funzione
EditRecord restituisce LPC_BAD_ARG se value è NULL e LPC_BAD_FIELD se c'è un nome di campo non valido nella struttura
FieldValue.
Vorrei sapere se l'unico controllo da fare sul campo value è che si tratti di un campo non nullo (come del resto si evince dalle specifiche) e cosa si intende esattamente per nome di campo non valido, cioè dobbiamo controllare che si tratti di una stringa della giusta lunghezza e "composizione" oppure che sia presente tra i campi dei record del DBF un campo con lo stesso nome?
Grazie per l'attenzione concessami.
--
AndreaNaim - 12 Jul 2006
Re: Chiarmiento sull'uso di GetFieldInfo
No, va bene.
--
GianniCampanile - 13 Jul 2006
Re: Trasformazione double
Non capisco cosa sono quei valori, non sono double ma sembrano puntatori. In ogni caso non posso risolvere io il problema, deve trovare lei l'errore.
--
GianniCampanile - 13 Jul 2006
Re: EditRecord chiarimento
A parte che il NULL ci dovrebbe gia' essere (messo dalla
InsertRecordBlank), se un campo e' piu' corto ? (ad.es. CHAR)
--
GianniCampanile - 13 Jul 2006
Re: Controlli da fare su value e sui nomi dei campi in FieldValue
Che sia un campo esistente nel DBF.
--
GianniCampanile - 13 Jul 2006
Chiarimento su LPC_ERR_EOF
Dalle specifiche non e' ben chiaro questo: nella Edit e nella Read, se non ci sono record o il file e' posizionato su EOF, oltre a ritornare LPC_ERR_EOF, devo chiamare LPC_GestioneErrore()?
--
PaoloGrasso - 13 Jul 2006
Re: Chiarimento su LPC_ERR_EOF
Si, e' un errore e va gestito come tale.
--
GianniCampanile - 13 Jul 2006
avvisi valgrind
Salve professore. Eseguendo il Test del modulo 4 con valgrind al terzo mi dà uno strano avviso. Premetto che risultati dei test sono tutti 100. Ho Visto che questo messaggio mi esce solo quando c'è da trovare un campo LOGICAL. Questo è l'avviso:
Test:[40313] Peso:[10] - [LOCATE: Funzionalita'(6)]
==9696==
==9696== Invalid read of size 1
==9696== at 0x1B900370: strcmp (in /usr/lib/valgrind/vgpreload_memcheck.so)
==9696== by 0x805112F: LocateRecord (LPC_LocateRec.c:1018)
==9696== by 0x804B8F3: TestLocate (TestM4.c:800)
==9696== by 0x8048F23: main (TestM4.c:180)
==9696== Address 0x1BA6D269 is 0 bytes after a block of size 1 alloc'd
==9696== at 0x1B8FFB88: calloc (in /usr/lib/valgrind/vgpreload_memcheck.so)
==9696== by 0x8050FA1: LocateRecord (LPC_LocateRec.c:989)
==9696== by 0x804B8F3: TestLocate (TestM4.c:800)
==9696== by 0x8048F23: main (TestM4.c:180)
Ritorno della LocateRecord: [20]
------------------------------------------------------------
Praticamente quando alloco 1 byte di memoria.
Confido in qualche delucidazione. Grazie
--
GianlucaAlbanese - 13 Jul 2006
ReadRecord e Conversione Double
Volevo porgere le seguenti domande:
Sulle specifiche si parla di conversione di Double: forse mi sfugge qualcosa... ma dove sono spuntati fuori dati di tipo double??
la senconda domanda invece riguarda la
ReadRecord:
non ho ben capito cosa succede quando
NumValues è = a 0;
L'array
FieldValue lo abbiamo già (e in quel caso quanto è grande...)
oppure lo dobbiamo allocare interamente noi da dentro la funzione (ma in quel caso la valgrind nn darebbe fastidio x la memoria nn disallocata??)???
--
LucaMargiani - 13 Jul 2006
struttura FIELD_VALUE_t
scusate ma ho dei problemi con la struttura FIELD_VALUE_t perchè nelle specifiche si dice che la struttura deve essere allocata dal chiamante per il numero di elementi necessari e il rispettivo campo values per contenere i valori da leggere .......ma non sempre è allocato in modo da contenere i dati da leggere esempio nel test della
ReadRecord 20409 io devo copiare il campo nome di 255 ma la value è allocato a 4.....come è possibile???
--
IreneBucci - 15 Jul 2006
Risultati modulo4
Come è possibile che su 2 pc diversi con 2 diversi OS ho il 100% ed invece sui vostri test fallisco gli ultimi due???Posso capire un errore di memoria o qualcosa del genere ma che i codici di ritorno siano diversi...potete illuminarmi??
--
AlessandroMarinelli - 19 Jul 2006
Re: Risultati modulo4
Non so che dire, mi sembra ci sia un problema con la Locate per cui (ad esempio sul test misto) trova il record quando non dovrebbe esserci.
--
GianniCampanile - 19 Jul 2006
Re: struttura FIELD_VALUE_t
Non capisco il test a cui si riferisce, comunque le allocazioni sono fatte allo startup e mi sembra che siano tutte fatte secondo la lunghezza dei campi
--
GianniCampanile - 19 Jul 2006
Risulato Modulo4
Ho fatto il test del Modulo anche al laboratorio a via Salaria e mi da 100% e su altri Pc lo stesso puntegio , e non so perche nel resulatato ho 86,89%
--
AlbanKomici - 19 Jul 2006
Re: Risultati modulo 4
Scusa ma dove li vedete i risultati?
--
GiuseppeDiFederico - 21 Jul 2006
Data pubblicazione risultati
Quando sarà possibile conoscere l'esito dell'esame?
--
MassimilianoNatale - 22 Jul 2006
ATTENZIONE ESAME LUGLIO STERBINI
Chi vuole dare l'esame con il professor Sterbini a Luglio deve mandare una mail (vedere nella pagina di Verbalizzazione). Prima dell'esame saranno corretti SOLO i compiti di chi deve sostenere l'esame.
--
GianniCampanile - 23 Jul 2006
Re: (senza titolo)
--
AlbanKomici - 24 Jul 2006
Re: Verbalizzazione
Scusa ma l'email a chi deve essere mandato a Prof. Camapinle || Sterbeni
--
AlbanKomici - 24 Jul 2006
Voto totale Modulo 4
Una domanda...ma il voto totale del modulo nn dovrebbe essere la media tra il test e l'aderenza alle specifiche(normalizzata a 100)??anche perchè...(100---+48)/2 = 74 = BUONO....
--
AlessandroMarinelli - 21 Aug 2006
Re: Voto totale Modulo 4
anche io l'ho notato... ho già mandato una mail
--
DanieleSchirmo - 21 Aug 2006
No such template def TMPL:DEF{PROMPT:thread}
- Se usate dei titoli comprensibili ci capiamo tutti un po' meglio
- Ricordatevi di chiudere i tag che inserite nei post.
- Non parite con i flame, c'è una pagina apposta per gli OffTopic.
--
AndreaSterbini - 24 May 2006