मैं निम्नलिखित खिलौना कार्यक्रम है कि पर OSX 10,6बढ़ावा :: program_options malloc त्रुटि देता है
#include <boost/program_options.hpp>
namespace po = boost::program_options;
#include <iostream>
using namespace std;
int main(int ac, char* av[])
{
po::options_description desc("Allowed options");
desc.add_options() ("help", "produce help message") ;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);
if (vm.count("help")) {
cout << desc << "\n";
return 0;
}
cout << "Program continues\n";
return 0;
}
मैं बढ़ावा संस्करण 1.52 MacPorts के साथ स्थापित किया है MacPorts जीसीसी के साथ त्रुटियों देता है। मैं इस कार्यक्रम को संकलित रूप में
g++ a.cpp -lboost_program_options-mt -L/opt/local/lib -g -O0
यह ठीक संकलित:
$ ./a.out
Program continues
लेकिन यह सहायता संदेश मुद्रित नहीं कर सकते:
$ ./a.out --help
Allowed options:
a.out(40110) malloc: *** error for object 0x7fff70ca3500: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap
मैंने सुना है इस तरह कि सामान अगर हो सकता है पुस्तकालयों को प्रोग्राम बनाने के लिए इस्तेमाल किए गए जीसीसी के एक अलग संस्करण के साथ संकलित किया जाता है। मैं इसके लिए कैसे जांच करूं? मेरे पास है
$ g++ --version
g++ (MacPorts gcc47 4.7.2_2) 4.7.2
अद्यतन: इस के साथ और पुराने बूस्ट एक Linux मशीन पर काम करने के लिए लगता है।
अद्यतन 2: gdb के उत्पादन
(gdb) run
Starting program: /Users/yasir/Downloads/mask.util/a.out --help
Reading symbols for shared libraries ++++.. done
Allowed options:
a.out(42256) malloc: *** error for object 0x7fff70ca3500: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal SIGABRT, Aborted.
0x00007fff821030b6 in __kill()
(gdb) bt
#0 0x00007fff821030b6 in __kill()
#1 0x00007fff821a39f6 in abort()
#2 0x00007fff820bb195 in free()
#3 0x00000001001188b4 in std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow()
(gdb)
अद्यतन 3 इस प्रकार है: कार्यक्रम Xcode gcc42 साथ ठीक काम करता है, समस्या केवल MacPorts जीसीसी के साथ होता है।
यह कोड मुझे सही दिखता है (program_options का उपयोग करके मेरे स्रोत कोड की तुलना में)। क्या आप इसे gdb में चला सकते हैं (-ddb3 -O0 के साथ संकलित करें और 'gdb --args ./a.out --help' चलाएं और' run' और 'bt' टाइप करें)? –
@ राफलावाविकि, बस अपने झंडे के साथ संकलन के बाद जीडीबी जानकारी जोड़ा – highBandWidth