Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: MHz (28.10.2013 в 22:57) Здравствуйте! Дело вот в чем. Создаю в main() указатель типа char* чтобы в дальнейшем записать в него строку. Только вот не понимаю какое значение этому указателю нужно присвоить чтобы в дальнейшем можно было выделить для него память. Если оставить его пустым, то realloc завершается ошибкой, если же присвоить ему NULL получаю ошибку сегментирования. Если обьявить его как char* document = malloc (0); то все отрабатывает так как и нужно, но что-то мне кажется это не совсем верно. А может я вообще изначально начал неправильно делать?) Подскажите пожалуйста решение. За много часов гугления я так и не понял свой ошибки. Кмпилятор gcc (Gentoo 4.8.1-r1 p1.2, pie-0.5.7) 4.8.1, glibc-2.17 Вот собственно проблема в char *document
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> void get_document (const char *url, char **buffer); size_t curl_write (char *content, size_t size, size_t nmemb, char **buffer); int main (int argc, char **argv) { int count; for (count = 1; count < argc; count++) { char *document = NULL; //printf ("Ptr = %p\n", document); get_document (*(argv + count), &document); printf ("%s\n", document); free (document); } return 0; } size_t curl_write (char *content, size_t size, size_t nmemb, char **buffer) { //printf ("Ptr = %p\n", *buffer); size_t real_size = size * nmemb; size_t current_size = strlen (*buffer) * sizeof (char); if (!(*buffer = (char*) realloc (*buffer, current_size + real_size + 1))) { fprintf (stderr, "Ошибка выделения памяти! %s\n", __FUNCTION__); exit (1); } memcpy (*buffer + current_size, content, real_size); *(buffer + current_size + real_size) = '\0'; return real_size; } void get_document (const char *url, char **buffer) { CURL *curl_resource; CURLcode curl_result; //printf ("Ptr = %p\n", *buffer); if (!(curl_resource = curl_easy_init ())) { fprintf (stderr, "Произошла ошибка во время инициализации CURL!\n"); exit (1); } curl_easy_setopt (curl_resource, CURLOPT_URL, url); curl_easy_setopt (curl_resource, CURLOPT_WRITEDATA, buffer); curl_easy_setopt (curl_resource, CURLOPT_WRITEFUNCTION, curl_write); if ((curl_result = curl_easy_perform (curl_resource)) != CURLE_OK) { fprintf (stderr, "Произошла ошибка во время выполнения CURL: %s!\n", curl_easy_strerror (curl_result)); } curl_easy_cleanup (curl_resource); }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: