Unbehandelte Ausnahme - Access violation

Shooter2k

Erfahrenes Mitglied
Hallo Tutorials,
ich bins mal wieder und komme nicht weiter.

Es geht um folgendes:
Mein Programm bestand vorher nur aus Funktionen nicht aus Klassen. Habe die Funktionen jetzt in eine Klasse verpackt und eine Funktion davon funktioniert nun nicht mehr richtig.

Ich bekomme den Fehler:
Unbehandelte Ausnahme bei 0x773d15ee in test.exe: 0xC0000005: Access violation.
Ich glaube es Handelt sich um einen Pointer der kein Zugriff mehr hat oder ähnliches.

Mein Code sieht folgendermaßen aus:
Code:
class Test
{
    public:
		
		//////////////////////////// Funktion für cURL schreibt in Var
		size_t append_string( char *ptr, size_t size, size_t nmemb, void *userdata) {
		  if (ptr != NULL) {
			std::string* str = reinterpret_cast<std::string*>(userdata);
			str->append(ptr, size * nmemb);
		  }
		  return (size * nmemb);
		}


		/////////////////////////// Funktion für internen Request1
		string internRQ1()
		{
			CURL *curl;


			string str;
			//CString url;
			string url = "http://www.test.de";


			// String in Char umwandeln für die cURL
			char* fUrl = const_cast<char*>(url.c_str());

			CURLcode res;
			curl = curl_easy_init();
			if(curl) {
				curl_easy_setopt(curl, CURLOPT_URL, fUrl);
				curl_easy_setopt(curl,  CURLOPT_WRITEDATA, &str);
				curl_easy_setopt(curl,  CURLOPT_WRITEFUNCTION, &Test::append_string);
				res = curl_easy_perform(curl);
		
				curl_easy_cleanup(curl);
			}

			return str;
		}

};

Der Fehler müsste irgendwo in der nähe von "res = curl_easy_perform(curl);" liegen, da mir der Fehler dort angezeigt wird.

Wie gesagt, als ich die Funktion noch nicht in einer Klasse hatte funktionierte sie einwandfrei.

Kann mir jemand helfen?
Vielen Dank
 
Hey sheel,
danke für die Antwort. Eigentlich ist das die Funktionsvariante, nur dass ich statt

Code:
curl_easy_setopt(curl,  CURLOPT_WRITEFUNCTION, &Test::append_string);

vorher
Code:
curl_easy_setopt(curl,  CURLOPT_WRITEFUNCTION, &append_string);

geschrieben habe.
An der Funktion "size_t append_string" hat sich gar nichts geändert.
Hast du eine Idee?

Besten Dank
gruß
 
append_string ist eine Instanzenmethode.
dh. damit sie für jede Klasseninstanz extra ist,
bekommt sie beim normalen Aufruf intern einen Pointer auf die Klasseninstanz
(als weiteren Parameter) übergeben.
CUrl ruft es als normale, klassenlose Funktion auf, und da krachts dann.

Da append_string keine Klassenvaiablen braucht,
sondern nur Parameter und lokale Variablen verwendet,
mach die Funktion static.
 
Finde sehr nett von dir, dass du dir die Zeit genommen hast. Das werde ich ausprobieren und mich wieder hier melden.

Gruß

Hallo sheel, es hat funktioniert! Vielen Dank nochmal

gruß
 
Zuletzt bearbeitet von einem Moderator:
Zurück