curl zawiesza sie

0

Witam to znowu ja :(

Mam problem z curl. Mam taka funkcje która wywołuje po kliknięciu w przycisk

 
string loadPage(string url){
	static char CURL_errorBuffer[CURL_ERROR_SIZE];
	static string CURL_buffer;
	CURL *curl;  
	CURLcode CURL_result;
	
	curl = curl_easy_init();
	if(curl){
	// Now set up all of the curl options  
		curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, CURL_errorBuffer);  
		  
		curl_easy_setopt(curl, CURLOPT_HEADER, 0);  
		curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);  
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);  
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, &CURL_buffer);  
		curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
		// Attempt to retrieve the remote page  
		CURL_result = curl_easy_perform(curl);  

		// Always cleanup  
		curl_easy_cleanup(curl);  

		// Did we succeed?  
		if (CURL_result == CURLE_OK){  
			cout << "http -- " << CURL_buffer << "\n";  
			
		}else{  
			//cout << "Error: [" << CURL_result << "] - " << CURL_errorBuffer;  
			//MessageBox( NULL, CURL_errorBuffer, "CURL ERROR", MB_ICONEXCLAMATION );
			
		}
	}else{
		CURL_buffer = "jakis blad";
	}	
	
	delete(curl);	
	//delete(&CURL_buffer);	
	delete(&CURL_result);	
	//delete(CURL_buffer);	
	return CURL_buffer;		
}


wszystko ladnie dziala i w ogole jest super tylko gdy klikne jeszcze raz w przycik moj program sie zawiesza... mozecie mi cos poradzic na ten temat?

0

próbujesz skasować obiekt nie utworzony operatorem new

delete(&CURL_result);

a raczej próbujesz skasować adres tego obiektu a nie sam obiekt

Usuń najlepiej tą powyższą linijkę.

0

Nie bawiłem się curl'em ale 2 wyniki z google mi mówią że CURLcode to enum - enum reprezentuje int. Na dodatek metoda curl_easy_perform zwraca enum CURLcode - nic z CURL_result nie rób, bo jest to zmienna ze stosu, zostanie usunięta, gdy skończy działać Twoja funkcja. Czy tutaj tkwi problem aplikacji? Nie wiem - popraw i przetestuj, ewentualnie zwróć uwagę czy gdzieś nie zrobiłeś podobnych błędów.

0

ok poprawilem bledy tylko teraz mam problem tego typu ze CURL_buffer pamieta zawartosc poprzednich klikniec gdy zrobie
delete(&CURL_buffer);
mam 1 wyniki jakies dziwne krzaczki i obecny wynik

i np gdy wysylam curl i w linku jest np "[etert] ala ma kota " to tez sie zawiesza.. to moze byc wina kodowania?

trzeba zamieniac znaki specialne np spacje na %20

0

CURL_buffer ma typ static string? Jeśli tak to dlaczego traktujesz go przez delete? Proponuję poczytać o zmiennych na stosie i na stercie w C++, bo źle używasz new i delete. Poza tym nie bardzo wiem po co deklarujesz CURL_buffer jako static.

0

w sumie to tez nie wiem nigdy sie nie bawiem z c++ moze jakies 2 tyg temu zacząłem robic swój program okienkowy i sie mecze :)
a to byl gotowy przyklad wie myslalem ze tak ma byc :) dzieki za podpowiedz teraz jak CURL_buffer jest normalnym stringiem to dziala normalnie

0

Ja proponuje byś na początek zrezygnował z curl i wszelkiego gui. Weź w miarę dobrą książkę/kurs i poczytaj o C++. Proste programy ze strumieniami cin, cout do pobierania/wyświetlania danych da Ci więcej niż czytanie o czarnej magii - bo teraz tak to wygląda. Znalazłeś coś i piszesz nie wiedząc dokładnie co. Podstawy z C++ może zajmą Ci z 2 tygodnie - wtedy widzę sens próbowania bibliotek zewnętrznych, bo wtedy będziesz wiedział z czym się co je i do czego służy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1