Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ can';t复制指针';s地址到h_地址列表_C++_C_Pointers_Dns_Network Programming - Fatal编程技术网

C++ can';t复制指针';s地址到h_地址列表

C++ can';t复制指针';s地址到h_地址列表,c++,c,pointers,dns,network-programming,C++,C,Pointers,Dns,Network Programming,我在处理dns服务器的answare到主机地址查询,到struct hostent的h_addr_列表字段时遇到了一些困难 我描述的函数对没有别名的主机很好,我调试了它,它工作得很好。 但是,对于别名为的主机名,当我调试程序时,我看到它不会将应答缓冲区中IPv4地址的指针从dns服务器复制到我创建的结构,并将其保留为坏指针字段 IPv4打印功能如下所示: const int numOfAns=ntohs(dns->ans_count); struct hostent remoteHost;

我在处理dns服务器的answare到主机地址查询,到
struct hostent
的h_addr_列表字段时遇到了一些困难

我描述的函数对没有别名的主机很好,我调试了它,它工作得很好。 但是,对于别名为的主机名,当我调试程序时,我看到它不会将应答缓冲区中IPv4地址的指针从dns服务器复制到我创建的结构,并将其保留为
坏指针
字段

IPv4打印功能如下所示:

const int numOfAns=ntohs(dns->ans_count);
struct hostent remoteHost;
int numOfIP=0;
char **addressList;
addressList = new char*[numOfAns];
remoteHost.h_addr_list = addressList;
for(i=0;i<numOfAns;i++) {
    if(ntohs(answers[i].resource->type) == 1) { //IPv4 address
        numOfIP++;
        remoteHost.h_addr_list[i] = (char*)answers[i].rdata;
    }
}
remoteHost.h_addr_list[numOfIP] = NULL;
return &remoteHost;
const int numOfAns=ntohs(dns->ans\u计数);
结构主机远程主机;
int numOfIP=0;
字符**地址列表;
addressList=新字符*[numOfAns];
remoteHost.h_addr_list=地址列表;
对于(i=0;itype)==1){//IPv4地址
numOfIP++;
remoteHost.h_addr_list[i]=(char*)answers[i].rdata;
}
}
remoteHost.h_addr_list[numOfIP]=NULL;
返回&远程主机;

不确定它在您的情况下是否正确,但您不是在复制字符数组,而是在复制指向字符数组的指针。如果答案消失了,剩下的就是悬而未决的指针。
remoteHost
似乎是在本地声明的,不要将对它的引用返回给调用函数,因为
remoteHost
将在此函数返回时失效。我认为这不是问题,因为此函数适用于每个没有别名的主机。您的代码中有没有别名?索引
remoteHost.h\u addr\u list[numOfIP]
很可能会覆盖由
remoteHost.h\u addr\u list[i]=
放在那里的内容,这很可能是不正确的。