PDA

View Full Version : [C] status access violation: come risolvo?


blu_eye4
25-12-2008, 13:42
#include "libspopc.h"
#include <stdio.h>
int main(){
popsession* mysession;
int error = popbegin("pop.gmail.com", "examplend@gmail.com", "passwordnd", &mysession);
if(error != 0){
perror("Errore!\n");
}
else {
int last;
last = popnum(mysession);
}
popend(mysession);
return 0;
}



Quando eseguo l'eseguibile che da questo codice compilo, ottenfo vari errori di STATUS_ACCESS_VIOLATION... cosa può essere?


Grazie per l'eventuali risposte

ndakota
25-12-2008, 13:53
non sono molto ferrato in C ma mysession è un puntatore a cui non viene mai assegnato niente e lo usi in svariate funzioni, o sbaglio??

blu_eye4
25-12-2008, 14:19
allora... io sto usando la libreria libspopc per leggere email tramite il protocollo POP3. La funzione popbegin è così composta:

popbegin(char* servername, char* user, char* pass, popsession** &mysession);

nella documentazione si dice di dichiarare un oggetto popsession*. Si è sbagliata la guida allora? :stordita:

blu_eye4
25-12-2008, 14:28
guarda, riporto qui le parole della documentazione... abbi pazienza con me, purtroppo il C lo imparo da autodidatta e da 6-7 mesi circa...

To use libspopc, you have to include in your main program the libspopc header:
#include <libspopc.h>
Then, in you main function, declare a popsession* object. You don?t need to know what a popsession consists of, but if you are curious, see libspopc.h.
popsession* mysession;

starting the pop session:
To start a pop dialog with a pop3 server, use:
error=popbegin(char* servername, char* user, char* pass, popsession** &mysession);


mi sapresti ora dire come potrei risolvere? Grazie mille per le risposte

Apollo86
25-12-2008, 14:42
guarda, riporto qui le parole della documentazione... abbi pazienza con me, purtroppo il C lo imparo da autodidatta e da 6-7 mesi circa...

To use libspopc, you have to include in your main program the libspopc header:
#include <libspopc.h>
Then, in you main function, declare a popsession* object. You don?t need to know what a popsession consists of, but if you are curious, see libspopc.h.
popsession* mysession;

starting the pop session:
To start a pop dialog with a pop3 server, use:
error=popbegin(char* servername, char* user, char* pass, popsession** &mysession);


mi sapresti ora dire come potrei risolvere? Grazie mille per le risposte

Hai provato a mallocare la variabile come ha giustamente scritto Antonio23?

blu_eye4
25-12-2008, 14:50
Una cosa del tipo


#include "libspopc.h"
#include <stdio.h>
int main(){
popsession *mypop = (popsession *) malloc(sizeof(popsession));
int error = popbegin("pop.gmail.com", "examplend@gmail.com", "passwordnd", &mypop);
if(error != 0){
perror("Errore!\n");
}
else {
int last;
last = popnum(mypop);
}
popend(mypop);
return 0;
}


così? :confused:


a giusto che ci siete... mi sapreste consigliare un sito dove studiare le malloc et similia? Grazie mille ancora e se ho inteso male le vostre risposte perdonatemi

Apollo86
25-12-2008, 15:01
ti consiglio di leggerti la guida GAPIL (http://www.lilik.it/~mirko/gapil/gapil.html)

qua la sezione dove parla dell'allocazione dinamica della memoria:

http://www.lilik.it/~mirko/gapil/gapilsu22.html

Vincenzo1968
25-12-2008, 15:54
#include "libspopc.h"
#include <stdio.h>
int main(){
popsession* mysession;
int error = popbegin("pop.gmail.com", "examplend@gmail.com", "passwordnd", &mysession);
if(error != 0){
perror("Errore!\n");
}
else {
int last;
last = popnum(mysession);
}
popend(mysession);
return 0;
}



Quando eseguo l'eseguibile che da questo codice compilo, ottenfo vari errori di STATUS_ACCESS_VIOLATION... cosa può essere?


Grazie per l'eventuali risposte

La funzione popbegin restituisce un char* e non un int. Se la chiamata va a buon fine, viene restituito NULL. In caso di problemi, invece, viene restituito un messaggio di errore e la sessione non viene inizializzata.
Prova così:


int main()
{
int last;
char *szError = NULL;
popsession* mysession;

szError = popbegin("pop.gmail.com", "examplend@gmail.com", "passwordnd", &mysession);

if( szError )
{
printf("Errore : %s\n", szError);
free(szError);
return - 1;
}

last = popnum(mysession);
printf("Numero messaggi: %d\n", last);
popend(mysession);

return 0;
}


Non devi né allocare, né deallocare esplicitamente la memoria per il puntatore a popsession; La memoria per mysession viene allocata all'interno della funzione popbegin e viene liberata all'interno della funzione popend.

blu_eye4
25-12-2008, 17:12
grandissimo Vincenzo!!! Complimenti, sono spariti tutti quei errori :D


Complimenti e grazie ancora ;)


Penso che a questo punto la mia domanda è stata soddisfatta... moderatori se volete potete lockare il topic ;)



Grazie ancora Vincenzo!!

blu_eye4
27-12-2008, 09:14
Salve :D


Ok, sono un pochino assillante ma ho un bel problema da proporvi: sto usando la libreria libspopc, client POP3 in C, che supporta il protocollo SSL. Ora quando vado a compilare la libreria, mi da alcuni undefined reference che non mi sono chiari: riguardano tutti le SSL e sono per esempio _SSL_read, _SSL_write, _SSL_CTX_free. Che libreria debbo includere? Come risolvo? :stordita:

Grazie per le eventuali risposte