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
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.