|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2005
Città: Roma
Messaggi: 175
|
[C] problema fopen che mi genera un errore runtime
Ciao, ho una fopen messa in un ciclo che mi deve aprire un file binario e scriverci dentro dei dati.
Codice:
FILE* fileBlk=NULL; int z,nBlok; for(z=0;z<nBlock;z++){ if ((fileBlk = fopen(nvar, "w+b")) == NULL){ // scrivo il file binario printf("Non è possibile creare il file, probabile errore di permessi.\n"); exit(3); } fclose(fileBlk); } Compilo senza warning ma a runtime in questa parte del programma mi dà il seguente errore: ![]() Grazie per ogni suggerimento.
__________________
AN7, Athlon xp2400 @2400MHz, OCZ pc 3700 gold, 6600GT @600MHz, raid0 with seagate, Pioneer DVD-RW DVR-115D, PCTV, Thermaltake Purepower 420W, OCLABS liquid, Gentoo powered. MyCase, Bubble-TraProjex visita il mio sito: www.ecoglobo.it |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ma l'int 'nBlock' non va inizializzato prima di poterlo usare nel cilco for?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2005
Città: Roma
Messaggi: 175
|
si l'ho inizializzato prima nel codice originale, non l'ho postato qui.
__________________
AN7, Athlon xp2400 @2400MHz, OCZ pc 3700 gold, 6600GT @600MHz, raid0 with seagate, Pioneer DVD-RW DVR-115D, PCTV, Thermaltake Purepower 420W, OCLABS liquid, Gentoo powered. MyCase, Bubble-TraProjex visita il mio sito: www.ecoglobo.it |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Della serie: per favore aiutatemi con questo problema, eccovi il codice: ah, no, ve ne do uno diverso sennò è troppo facile ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
A cosa è impostato nvar?
Magari posta più codice, altrimenti non ti si può aiutare.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Oct 2005
Città: Roma
Messaggi: 175
|
Il codice è quello che ho usato nel progetto, ti chiedo scusa se mi sono diementicato di mettere l'inizializzazione della variabile, mi sembra che ero venuto qui per chiedere un aiuto, postando seriamente la parte di codice incriminata, impara a leggere bene perchè il codice che ho postato è lo stesso e non mi sono messo a fare giochetti cambiando il codice. Se non sei in grado di darmi una mano non inquinare la discussione ulteriormente.
__________________
AN7, Athlon xp2400 @2400MHz, OCZ pc 3700 gold, 6600GT @600MHz, raid0 with seagate, Pioneer DVD-RW DVR-115D, PCTV, Thermaltake Purepower 420W, OCLABS liquid, Gentoo powered. MyCase, Bubble-TraProjex visita il mio sito: www.ecoglobo.it |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
E poi qua nessuno è pagato per risolvere problemi agli altri: aiutaci ad aiutarti, non lanciare attacchi inutili. ![]() ciao ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Poi come dici tu, si è qui per dare una mano, trovi gente che ti risponde cercando di aiutarti e rispondi come se ti avessi provocato? ![]() Guarda, questo atteggiamento da 'bimbigiggi' proprio non lo reggo, ciao ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Oct 2005
Città: Roma
Messaggi: 175
|
Quote:
L'inizializzazione ho spiegato prima che c'è, sia per la variabile nIP che per nBlock, nvar è inizializzato così: char nvar[100]="TEMP/"; Il codice compila senza warning, in esecuzione da quell'erorre prima postato e raramente riesce ad eseguire correttamente il codice, il problema è sulla fopen, che non viene correttamente chiamata ed eseguita a runtime dandomi quell'errore prima postato, quello che non capisco è che l' fopen la utilizzo senza problemi con gli stessi parametri anche in altre parti del programma. cmq ecco il codice completo del ciclo: Codice:
// nIP e nBlock sono inizializzati prima come anche tutti gli array for(i=0;i<nIP;i++){ for(z=0;z<nBlock;z++){ //arrayBlokFile è inizializzato prima tutto a zero if(arrayBlockFile[z]==0){ // prosegui a ricevere il relativo blocco //array_block è inizializzato prima ad una matrice binaria if(array_block[arrayPING[0][i]][z]==1){ if(DEBUG==1)printf("ricevo il blocco numero: %d dal peer:%s\n",z,arrayIP[arrayPING[0][i]]); if(z<nBlock-1){ // ricevo un blocco che non sia l'ultimo addr_init (server2, PORT, inet_addr(arrayIP[arrayPING[0][i]])); //assegno l'indirizzo del server remoto a cui voglio connetermi if(inet_aton(arrayIP[arrayPING[0][i]], &(server2->sin_addr) )<=0){fprintf(stderr,"errore in inet_pton per %s",arrayIP[arrayPING[0][i]]); } if ( (sd2=socket(AF_INET,SOCK_STREAM,0)) <0) {printf ("Impossibile creare il socket!\n"); exit(1); } // Creazione della connessione if (connect(sd2, (const struct sockaddr*)server2, sock_size)<0) { printf("Impossibile collegarsi al server %s sulla porta %d: errore: %d\n",inet_ntoa(server2->sin_addr),PORT,errno); exit(2); } strcpy(nvar,"TEMP/"); send(sd2,"downl",6,0); // invio la richiesta per scaricare i blocchi del mio file send(sd2,"no",2,0); send (sd2, file_name, FILE_NAME_SIZE, 0); send(sd2, id, ID_SIZE,0); send (sd2, (int*) &z, sizeof(int), 0); strcat(nvar,file_name); itoa(z, str, 10); // 10 - decimal strcat(nvar," "); strcat(nvar,str); strcat(nvar," "); strcat(nvar,id); printf("file nome:%s\n",nvar); printf("ok0\n"); // il programma si ferma qui stampa ok0 e poi l'errore che ho postato prima // da qui in poi non viene eseguito, tranne che rare volte correttamente if ((fileBlk = fopen(nvar, "w+b")) == NULL){ // scrivo il file binario printf("Non è possibile creare il file, probabile errore di permessi.\n"); exit(3); } printf("ok1\n"); buffer = (char*) malloc(LENSEND*sizeof(char)); printf("ok2\n"); recv(sd2,buffer,LENSEND,0); printf("ok3\n"); fwrite(buffer,(LENSEND*sizeof(char)),1, fileBlk); printf("ok4\n"); send(sd2, (int*) &ack2, sizeof(int), 0); printf("ok5\n"); arrayBlockFile[z]=1; // segno i blocchi ricevuti fclose(fileBlk); close(sd2); printf("blocco %d / %d ricevuto\n",z,nBlock-1); free(buffer); } else if(z==nBlock-1){ // ricevo l'ultimo blocco addr_init (server2, PORT, inet_addr(arrayIP[arrayPING[0][i]])); //assegno l'indirizzo del server remoto a cui voglio connetermi if(inet_aton(arrayIP[arrayPING[0][i]], &(server2->sin_addr) )<=0){fprintf(stderr,"errore in inet_pton per %s",arrayIP[arrayPING[0][i]]); } if ( (sd2=socket(AF_INET,SOCK_STREAM,0)) <0) {printf ("Impossibile creare il socket!\n"); exit(1); } // Creazione della connessione if (connect(sd2, (const struct sockaddr*)server2, sock_size)<0) { printf("Impossibile collegarsi al server %s sulla porta %d: errore: %d\n",inet_ntoa(server2->sin_addr),PORT,errno); exit(2); } strcpy(nvar,"TEMP/"); send(sd2,"downl",6,0); // invio la richiesta per scaricare i blocchi del mio file send(sd2,"si",2,0); send (sd2, file_name, FILE_NAME_SIZE, 0); send(sd2, id, ID_SIZE,0); send (sd2, (int*) &z, sizeof(int), 0); recv(sd2,(int*)&last,sizeof(int),0); // ricevo la dimensione dell'ultimo blocco printf("dimesione last block:%d\n",last); strcat(nvar,file_name); itoa(z, str, 10); // 10 - decimal strcat(nvar," "); strcat(nvar,str); strcat(nvar," "); strcat(nvar,id); printf("file nome:%s\n",nvar); if ((fileBlk = fopen(nvar, "w")) == NULL){ // leggo il file binario printf("Non è possibile creare il file, probabile errore di permessi.\n"); exit(3); } buffer = (char*) malloc(last*sizeof(char)); recv(sd2,buffer,last,0); fwrite(buffer,(last*sizeof(char)),1,fileBlk); send(sd2, (int*) &ack2, sizeof(int), 0); arrayBlockFile[z]=1; // segno i blocchi ricevuti fclose(fileBlk); close(sd2); printf("blocco %d / %d ricevuto\n",z,nBlock-1); } } } } }
__________________
AN7, Athlon xp2400 @2400MHz, OCZ pc 3700 gold, 6600GT @600MHz, raid0 with seagate, Pioneer DVD-RW DVR-115D, PCTV, Thermaltake Purepower 420W, OCLABS liquid, Gentoo powered. MyCase, Bubble-TraProjex visita il mio sito: www.ecoglobo.it |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Visto il messaggio di errore sembra che tu abbia un problema con una free().
Nello spezzone di codice relativo alla fopen() [che non dovrebbe avere a che fare con il tuo problema], dentro il "corpo" dell'if, l'unica free() che vedo è quella relativa alla variabile "buffer": controlla bene la malloc() relativa e tutte le variabili coinvolte (e il loro uso). Credo che il problema sia quello. P.S.: Quote:
Questo credo, spero vivamente, lo avessi capito anche tu. Se ti sei offeso per questo, beh, mi dispiace. Ciao ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Oct 2005
Città: Roma
Messaggi: 175
|
Come ho detto lascia il tempo che trova l'ironia..non mi sono offeso tranquillo, capisco che molti utenti postano codici incompleti, infatti io di solito controllo sempre prima di postare ma era ora di pranzo e la fame chiamava..
![]() ![]()
__________________
AN7, Athlon xp2400 @2400MHz, OCZ pc 3700 gold, 6600GT @600MHz, raid0 with seagate, Pioneer DVD-RW DVR-115D, PCTV, Thermaltake Purepower 420W, OCLABS liquid, Gentoo powered. MyCase, Bubble-TraProjex visita il mio sito: www.ecoglobo.it |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Codice:
glibc detected free() invalid size ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Oct 2005
Città: Roma
Messaggi: 175
|
Ho risolto! un mega grazie!! Allora il problema era una sbagliata allocazione di memoria sull'array: arrayPING, in cui una riga doveva essere di interi mentre la seconda di char, mentre io l'avevo dichiarato tutto di interi! Seguendo il tuo consiglio mi sono subito andato a vedere la malloc esattamente prima della fopen incriminata, infatti nell'errore c'era una malloc e poi l'fopen e ho notato questa cosa...davo per scontato che le allocazioni sopra andavano bene
![]()
__________________
AN7, Athlon xp2400 @2400MHz, OCZ pc 3700 gold, 6600GT @600MHz, raid0 with seagate, Pioneer DVD-RW DVR-115D, PCTV, Thermaltake Purepower 420W, OCLABS liquid, Gentoo powered. MyCase, Bubble-TraProjex visita il mio sito: www.ecoglobo.it |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:12.