cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: Sample code throws at execution

From: Isaac Sanni-Thomas <isaacsannithomas_at_gmail.com>
Date: Thu, 10 Dec 2009 16:22:08 +0000

Hi Eric,
The code works on Fedora perfectly without a single modification of the
code below.
Issue is with your VS2008 Pro.
Memory handling issues with your compiler.

On 12/10/2009 02:49 PM, Eric Schwarz wrote:
> Hi,
>
>
> after some trouble I got libCurl building and linking with a sample I
> fetched from the net (http://curl.haxx.se/libcurl/c/ftpget.html).
>
> I am building with VS2008 Pro.
>
> When executing the sample program from within the VS the program throws.
>
> VS says
>
> "Unhandled exception at 0x77231ffe in Test.exe: 0xC0000005: Access
> violation reading location 0x4601877a."
>
> Obviously it has to do something with the cleanup functions.
>
> When commenting them out the program finishes as desired.
>
> Please find below the code which brings libCurl Sample to crash.
>
> /*****************************************************************************
>
> * _ _ ____ _
> * Project ___| | | | _ \| |
> * / __| | | | |_) | |
> * | (__| |_| | _ <| |___
> * \___|\___/|_| \_\_____|
> *
> * $Id: ftpget.c,v 1.8 2008/05/22 21:20:09 danf Exp $
> */
>
> #include <stdio.h>
>
> #include <curl/curl.h>
> #include <curl/types.h>
> #include <curl/easy.h>
>
> /*
> * This is an example showing how to get a single file from an FTP server.
> * It delays the actual destination file creation until the first write
> * callback so that it won't create an empty file in case the remote file
> * doesn't exist or something else fails.
> */
>
> struct FtpFile {
> const char *filename;
> FILE *stream;
> };
>
> static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void
> *stream)
> {
> struct FtpFile *out=(struct FtpFile *)stream;
> if(out && !out->stream) {
> /* open file for writing */
> out->stream=fopen(out->filename, "wb");
> if(!out->stream)
> return -1; /* failure, can't open file to write */
> }
> return fwrite(buffer, size, nmemb, out->stream);
> }
>
>
> int main(void)
> {
> CURL *curl;
> CURLcode res;
> struct FtpFile ftpfile={
> "curl.tar.gz", /* name to store the file as if succesful */
> NULL
> };
>
> curl_global_init(CURL_GLOBAL_DEFAULT);
>
> curl = curl_easy_init();
> if(curl) {
> /*
> * Get curl 7.9.2 from sunet.se's FTP site. curl 7.9.2 is most likely not
> * present there by the time you read this, so you'd better replace the
> * URL with one that works!
> */
> curl_easy_setopt(curl, CURLOPT_URL,
> "ftp://ftp.sunet.se/pub/www/utilities/curl/curl-7.9.2.tar.gz");
> /* Define our callback to get called when there's data to be written */
> curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
> /* Set a pointer to our struct to pass to the callback */
> curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
>
> /* Switch on full protocol/debug output */
> curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
>
> res = curl_easy_perform(curl);
>
> /* always cleanup */
> curl_easy_cleanup(curl);
>
> if(CURLE_OK != res) {
> /* we failed */
> fprintf(stderr, "curl told us %d\n", res);
> }
> }
>
> if(ftpfile.stream)
> fclose(ftpfile.stream); /* close the local file */
>
> curl_global_cleanup();
>
> return 0;
> }
>
>
> Thanks a lot for your assistance.
>
>
> Regards,
> --eric
> -------------------------------------------------------------------
> List admin: http://cool.haxx.se/list/listinfo/curl-library
> Etiquette: http://curl.haxx.se/mail/etiquette.html
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2009-12-10