我正在开发一个需要通过 FTP 进行交互的应用程序。对于这种交流,我目前在 Windows 上使用 C++、Visual Studio 和 Poco。
以下行导致 bad_alloc 异常...
ftp = new FTPClientSession("127.0.0.1", 21);
所以我下去尝试先初始化一个StreamSocket,也失败了......
StreamSocket ss = new SocketAddress("127.0.0.1", 21);
当走得更远时,bad_alloc 似乎来自:
IPAddress * ip = new IPAddress("127.0.0.1");
该构造函数包含:(我在调试器中看到 _pImpl 未初始化)
IPAddress::IPAddress(const std::string& addr)
{
_pImpl = IPv4AddressImpl::parse(addr);
if (!_pImpl) throw InvalidAddressException(addr);
}
IPv4AddressImpl::parse 包含:
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
}
以下带有来自 Winsock2.h (ws2_32.lib) 的 inet_addr 的代码会导致“SOMETHING ELSE”。
unsigned long ulAddr = INADDR_NONE;
ulAddr = inet_addr("91.183.48.210");
if (ulAddr == INADDR_NONE)
msg("NONE");
else
msg("SOMETHING ELSE");
我看不出这里出了什么问题......有没有办法进一步调试这个问题或者有人知道出了什么问题?