I am not sure why I am getting a segfault in the XMLString::transcode
function. Since I am new to Xerces I worked to produce a test program
that shows the error here on my system. This program was compiled with
GCC-4.1 and Xerces-c 2.7.0 on a Gentoo system. The segfault occurs at
the line in the Configuration_Tag_Names.cpp constructor:
TAG_PASSWORD ( XMLString::transcode ( "password" ) )
Any help is appreciated.
Stephen
---------- backtrace from GDB ---------------------
#0 0xb7dbcdc0 in xercesc_2_7::XMLString::transcode ()
from /usr/lib/libxerces-c.so.27
#1 0x08048e02 in Configuration_Tag_Names (this=0xbfaacf94)
at Configuration_Tag_Names.cpp:17
#2 0x08048ac8 in main () at test_configuration_tag_names.cpp:7
-------------------- CODE --------------------------
#include "Configuration_Tag_Names.hpp"
using namespace libreverse::infrastructure;
int main (int, char** )
{
Configuration_Tag_Names ctn;
}
#ifndef CONFIGURATION_TAG_NAMES_H
#define CONFIGURATION_TAG_NAMES_H
#include <xercesc/util/XercesDefs.hpp>
using namespace xercesc;
namespace libreverse {
namespace infrastructure {
class Configuration_Tag_Names {
public:
XMLCh* TAG_TRANSFER_TYPE;
XMLCh* TAG_FORMULA_DIRECTORY;
XMLCh* TAG_FILE_PREFIX;
XMLCh* TAG_DATABASE;
XMLCh* TAG_MEMORY;
XMLCh* TAG_HOST;
XMLCh* TAG_USER;
XMLCh* TAG_PASSWORD;
Configuration_Tag_Names ();
~Configuration_Tag_Names() throw ();
};
} /* namespace infrastructure */
} /* namespace libreverse */
#endif /* CONFIGURATION_TAG_NAMES_H */
#include "Configuration_Tag_Names.hpp"
#include <xercesc/util/XMLString.hpp>
#include <exception>
#include <iostream>
namespace libreverse {
namespace infrastructure {
Configuration_Tag_Names::Configuration_Tag_Names ()
: TAG_TRANSFER_TYPE ( XMLString::transcode ( "transfer_type" ) ),
TAG_FORMULA_DIRECTORY ( XMLString::transcode ( "formula_directory" )
),
TAG_FILE_PREFIX ( XMLString::transcode ( "file_prefix" ) ),
TAG_DATABASE ( XMLString::transcode ( "database" ) ),
TAG_MEMORY ( XMLString::transcode ( "memory" ) ),
TAG_HOST ( XMLString::transcode ( "host" ) ),
TAG_USER ( XMLString::transcode ( "user" ) ),
TAG_PASSWORD ( XMLString::transcode ( "password" ) )
{}
Configuration_Tag_Names::~Configuration_Tag_Names() throw ()
{
try {
XMLString::release ( &TAG_TRANSFER_TYPE );
XMLString::release ( &TAG_FORMULA_DIRECTORY );
XMLString::release ( &TAG_FILE_PREFIX );
XMLString::release ( &TAG_DATABASE );
XMLString::release ( &TAG_MEMORY );
XMLString::release ( &TAG_HOST );
XMLString::release ( &TAG_USER );
XMLString::release ( &TAG_PASSWORD );
}
catch ( std::exception& e ) {
std::cerr << "Exception: " << e.what() << std::endl;
}
}
} /* namespace infrastructure */
} /* namespace libreverse */