Hi All,

Not a Cocoa problem as such, but not sure if there's a better list for it:

On Snow Leopard (using gcc 4.2), I'm getting a 'double free' error in the guts of the C++ std::getline. The 'free' in question is being performed by std::string::reserve. This happens any time I run 'getline' (reading from cin) on a fresh, virgin string. (The error is only seen in the Debug configuration.)

If, prior to the 'getline' call, I run any of:
- reserve
- push_back
- = "blah"
...on the string, I don't get the error.

Any idea what's going awry?

A very simple test case follows:

#include <iostream>
#include <string>

using namespace std;

int main (int argc, char * const argv[]) {
        string line;

// Doing any of the following prior to 'getline' makes everything OK:
//      line.push_back('x');
//      line.reserve(10);
//      line = "x";

        getline(cin, line);
        
        cout << "Line is: \"" << line << "\"" << endl;

   return 0;
}

The error:
GetlineTest(1362) malloc: *** error for object 0x1000041e0: pointer being freed was not allocated

Stack trace:
#0      0x7fff87af0b91 in malloc_error_break
#1      0x7fff87a1a083 in free
#2      0x7fff827181e8 in std::string::reserve
#3      0x7fff82718243 in std::string::push_back
#4 0x7fff827012b5 in std::getline<char, std::char_traits<char>, std::allocator<char> > #5 0x100001cfb in std::getline<char, std::char_traits<char>, std::allocator<char> > at basic_string.h:2451
#6      0x10000141c in main at main.cpp:14

Thanks,
Aron
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to