Je développe une application qui doit interagir sur FTP. Pour cette communication, j'utilise actuellement C++, Visual Studio et Poco sous Windows.Comment résoudre ce problème bad_alloc?
Les résultats de la ligne suivante dans une exception bad_alloc ...
ftp = new FTPClientSession("127.0.0.1", 21);
Je suis donc allé et essayé l'initialisation d'un premier StreamSocket, échoue aussi ...
StreamSocket ss = new SocketAddress("127.0.0.1", 21);
Lorsque vous allez encore plus loin , et il semble que le bad_alloc provient:
IPAddress * ip = new IPAddress("127.0.0.1");
Ce constructeur contient: (I voir dans le débogueur que _pImpl n'est pas initialisés)
IPAddress::IPAddress(const std::string& addr)
{
_pImpl = IPv4AddressImpl::parse(addr);
if (!_pImpl) throw InvalidAddressException(addr);
}
IPv4AddressImpl :: parse contient:
static IPv4AddressImpl* parse(const std::string& addr)
{
if (addr.empty()) return 0;
#if defined(_WIN32)
struct in_addr ia;
ia.s_addr = inet_addr(addr.c_str());
if (ia.s_addr == INADDR_NONE && addr != "255.255.255.255")
return 0;
else
return new IPv4AddressImpl(&ia);
#else
#if __GNUC__ < 3
struct in_addr ia;
ia.s_addr = inet_addr(addr.c_str());
if (ia.s_addr == INADDR_NONE && addr != "255.255.255.255")
return 0;
else
return new IPv4AddressImpl(&ia);
#else
struct in_addr ia;
if (inet_aton(addr.c_str(), &ia))
return new IPv4AddressImpl(&ia);
else
return 0;
#endif
#endif
}
Le code suivant avec inet_addr de WINSOCK2.H (Ws2_32.lib) résultats dans « AUTRE CHOSE ". Je ne vois pas ce qui ne va pas ici ... Y a-t-il un moyen de déboguer davantage ou quelqu'un sait-il ce qui ne va pas?
Lorsque vous dites "_pimpl n'est pas initialisé", voulez-vous dire que la valeur zéro est affectée au constructeur IPAddress? –
ip = 0xcccccc {_pImpl = ??? } CXX0076: Erreur: –
Il est impossible d'évaluer l'expression de _pImpl, donc probablement pas initialisée. –