cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: Sample code throws at execution

From: Eric Schwarz <master.universe_at_gmx.at>
Date: Thu, 10 Dec 2009 18:18:04 +0100

Hi,

first thanks for your effort.

Second, I have to emphasise that as you know I was "forced" to this
project with Visual Studio 2008.

It runs on Windows 7 Pro, if this could be helpful.

As you know for sure to produce portable and quality code it should be
possible to compile with different compilers since each brings up other
errors and warnings as we see.

I doubt if there's a compiler out there which shows up all the leaks and
warnings - enough for that.

By the way I lack at the moment for a LINUX distribution and haven't got
too much time to spend on that problem.

For the problem:

It seems to me that there is a problem with the memory management indeed.

VS stops when executing in debug mode in file

..\curl-7.19.7\lib\hostthre.c at line 134

Obviously there is a problem with the freeing of the memory.

Three possibilities come to my mind.

1.) No mem was allocated.

2.) The alloc didn't work.

3.) The mem was already freed at another place.

I would appreciate, Thomas, if you could back up your statement by the
use of a tool like Valgrind you know for sure (http://valgrind.org) .

If some one is willing I am willing to, to send my VS sample project to
one who is interested in getting the problem solved.

Regards,
--eric

On 10.12.2009 17:22, Isaac Sanni-Thomas wrote:
> 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
>

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2009-12-10